FoxPro/Visual FoxPro - Compartir Base de Datos en Red

 
Vista:
Imágen de perfil de Cristhian
Val: 47
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Compartir Base de Datos en Red

Publicado por Cristhian (21 intervenciones) el 16/07/2020 15:23:00
Buenos días
Estoy tratando de hacer funcionar un programita en red de dos pc con windows 10, no lo estoy logrando.
En el servidor (nombre maedi-pc) arranca y funciona perfectamente, pero en la estación al querer iniciar me sale el mensaje
"No se puede encontrar \\maedi-pc\negoc\productos.dbc"
no se por que si al parecer estoy direccionando correctamente el OPEN DATABASE a la carpeta donde se encuentra la base de datos "productos.dbc", en la carpeta C:\negoc\tablas.

No se que error estaría cometiendo, si pudieran ayudarme por favor

Este es el código de mi programa principal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SET EXCLUSIVE OFF
application.visible=.f.
SET TALK OFF
SET DELETED ON
SET CONFIRM ON
SET DECIMALS TO 2
SET ENGINEBEHAVIOR 70
SET HOURS TO 24
 
PUBLIC equipo, NombreServidor
 
IF FILE('C:\Windows\winweb.DLL') &&Archivo dll para comprobar si la maquina es servidor
	equipo = 'Servidor'
	NombreServidor = SUBSTR(SYS(0), 1, AT('#' ,SYS(0), 1)-1)
ELSE
	equipo = 'Estación'
ENDIF
 
IF equipo = 'Servidor'
	ServidorTablasRuta = 'C:\negoc\tablas'
	SET PATH TO &ServidorTablasRuta
	OPEN DATABASE 'C:\negoc\tablas\productos.dbc' SHARED
	WAIT WINDOW 'Iniciando sesión en Servidor' TIMEOUT 1
	DO FORM inicio
	READ EVENTS
ELSE
	WAIT WINDOW 'Iniciando sesión en Estación' TIMEOUT 1
	DO FORM inicio
	READ EVENTS
ENDIF
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Cristhian
Val: 47
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Compartir Base de Datos en Red

Publicado por Cristhian (21 intervenciones) el 16/07/2020 17:06:08
Investigando y siguiendo consejos hice unos cambios y funciona perfectamente, pero en este caso estoy obligado a cambiar el nombre de la PC servidor a maedi-pc.
Lo que me gustaría es guardar el nombre del servidor en una variable, para no tener que estar cambiando el nombre de la PC.

Al querer hacer así me salen tres errores
1. Incompatibilidad entre el tipo de operador y el tipo de operando (Pasar por Alto)
2. Incompatibilidad entre el tipo de operador y el tipo de operando (Pasar por Alto)
3. Error al crear instancia del objeto Cursor. No se puede encontrar \\maedi-pc\negoc\productos.dbc

Este es el código del prg principal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SET EXCLUSIVE OFF
application.visible=.f.
SET TALK OFF
SET DELETED ON
SET CONFIRM ON
SET DECIMALS TO 2
SET ENGINEBEHAVIOR 70
SET HOURS TO 24
 
PUBLIC equipo, impr, objeto_con_enfoque, NombreServidor
fecha=DATE()
 
IF FILE('\Windows\winweb.DLL') &&Si el archivo existe, es servidor
equipo = 'Servidor'
NombreServidor = SUBSTR(SYS(0), 1, AT('#' ,SYS(0), 1)-1) &&Nombre del servidor - "maedi-pc"
ELSE
equipo = 'Estación'
ENDIF
 
IF equipo = 'Servidor'
SET PATH TO CURDIR(),tablas,informes
OPEN DATABASE  productos  SHARED
WAIT WINDOW 'Iniciando sesión en Servidor' TIMEOUT 1
DO FORM rotulo
READ EVENTS
ELSE
SET PATH TO \\maedi-pc\negoc\tablas                                           && Asi funciona
OPEN DATABASE \\maedi-pc\negoc\tablas\negocio.dbc             && Asi funciona
*SET PATH TO '\\'+ALLTRIM(NombreServidor)+'\negoc\tablas'   && Asi no funciona
*OPEN DATABASE '\\'+ALLTRIM(NombreServidor)+'\negoc\tablas\ productos.dbc'         && Asi no funciona
WAIT WINDOW 'Iniciando sesión en Estación' TIMEOUT 1
DO FORM rotulo
READ EVENTS
ENDIF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Compartir Base de Datos en Red

Publicado por Fidel José (657 intervenciones) el 16/07/2020 22:05:54
Supongo que estás pensando en una instalación distribuida, donde cada usuario tiene el ejecutable en alguna carpeta de su equipo.
En este caso, Visual Fox te permite trabajar con el nombre de Red del equipo que hace de servidor, o con su dirección IP4, siempre que se la configure como estática.
Por ejemplo, en una ventana de CMD escribes
ping maedi-pc -4
La respuesta te va a dar el número de IP4, por ejemplo:
lcServerIp = "\\192.168.0.1"
Luego:
lcRoot = ADDBS(m.lcServerIp) + ADDBS("negoc")+"Tablas"

Ahora te muestro una rutina de guia para este tipo de instalaciones.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
PROCEDURE INICIAL
LOCAL lcRoot,;
	lcFileRoot,;
	lcProgramRoot,;
	objShell,;
	lcFileTest
 
 
* Determinar el directorio actual por Wscript
**********************************************
objShell=CreateObject("Wscript.Shell")
lcProgramRoot = objShell.CurrentDirectory
objShell= null
**********************************************
 
lcFileRoot = ADDBS(m.lcProgramRoot)+"mySystem.cfg"	&& Archivo plano que guarda la ruta de acceso
IF FILE(m.lcFileRoot)
	lcRoot = STREXTRACT(FILETOSTR(m.lcFileRoot),"<root>","</root>")
ENDIF
IF EMPTY(m.lcRoot) OR !DIRECTORY(m.lcRoot)
	lcRoot = GETDIR(FULLPATH(""),"Seleccione Carpeta","Buscando el Servidor",64)
 
	* Si no se elige una ruta, salgo del programa
	IF EMPTY(m.lcRoot)
		QUIT
	ENDIF
 
	* Acá se pueden hacer otras verificaciones
	* Por ejemplo, si existe "negocio.dbc"
	* Si no existe la dbc, entonces no es la ruta correcta.
	lcFileTest = ADDBS(m.lcRoot)+"negocio.dbc"
	IF !FILE(m.lcFileTest)
		MESSAGEBOX("La ruta "+m.lcroot+" es incorrecta",0,"Inicio del Sistema",2000)
		QUIT
	ENDIF
 
	* Guardo la ruta de acceso obtenida
	STRTOFILE(m.lcFileRoot,"<root>"+m.lcRoot+"</root>",0)
 
ENDIF
 
* Para tener en todo el sistema una propiedad
* de Screen que recuerde la ruta de acceso
ADDPROPERTY(_Screen,"MyServ",m.lcRoot)
 
* Si queremos conservar la ruta de inicio
ADDPROPERTY(_Screen,"dirApp",m.lcProgramRoot)
 
* Acá puedes poner también:
lcRoot = _Screen.MyServ
SET DEFAULT TO &lcRoot
 
 
* Para abrir una tabla en una dirección especificada
USE (ADDBS(_Screen.MyServ)+lcNameTable) IN 0 SHARED
 
* Para abrir una dbc
OPEN DATABASE (ADDBS(_Screen.MyServ)+"negocio.dbc") SHARED
 
* Nota
* Si SET DEFAULT TO &lcRoot es correcto, se puede obviar la referencia a la carpeta
USE (m.lcNameTabla) IN 0 SHARED
OPEN DATABASE negocio SHARED
* Yo prefiero utilizar la notación completa de las rutas.
 
* Otros comandos
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cristhian
Val: 47
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Compartir Base de Datos en Red

Publicado por Cristhian (21 intervenciones) el 17/07/2020 01:12:21
Muchas gracias por la respuesta Fidel
Lo estaré probando y aviso como me ha ido

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 34
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Compartir Base de Datos en Red

Publicado por Rodolfo (10 intervenciones) el 04/08/2020 18:30:17
Vamos a ver si te entiendo.. En el servidor la aplicación funciona sin problemas porque ahí están todos los archivos, no?.. El problema es cuando intentas acceder desde otra PC?.. Si es así, no entiendo por qué en el .PRG quieres determinar si la aplicación se está ejecutando en el servidor o en una estación.. Pienso que lo que deberías hacer es omitir esa parte en el .PRG y simplemente en la estación crear un acceso directo a la aplicación. Para esto deberías previamente conectar a una unidad de red la carpeta del servidor donde reside el programa.. Adjunto un ejemplo.
Acceso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cristhian
Val: 47
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Compartir Base de Datos en Red

Publicado por Cristhian (21 intervenciones) el 14/08/2020 22:01:10
Gracias a todos por sus respuestas. Problema resuelto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar