Compartir Base de Datos en red FoxPro

63 views
Skip to first unread message

Cristhian Martínez

unread,
Jul 16, 2020, 9:25:39 AM7/16/20
to Visual Foxpro Latinoamérica
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

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  

Alvaro Castellar

unread,
Jul 16, 2020, 9:41:11 AM7/16/20
to Visual Foxpro Latinoamérica
Hola amigo como estas

Para que el programa te funcione en red debes tener en cuenta lo siguiente:

- Compartir la carpeta donde esta el programa en el equipo servidor
- Abrir la base de datos con de forma compartida
      Open Database BaseDatos Shared
- Abrir las tablas para uso compartido
       Use MiTabla In 0 shared 

     
Yo particularmente no abro las tablas con la ruta fisica de la unidad ya que da el problema que si se cambia la letra de la unidad compartida da error:

Lo que hago es usar el comando SET PATH y coloco las diferentes carpetas que quiero que el programa encuentre por eJ:

SET PATTH TO CURDIR(), Dbf, Imagenes, Reportes   && Aqui le digo que busque en el directorio principal y en las subcarpetas DBF, Imagenes, Reportes 


De esta forma cuando quieres abrir una tabla o base de datos no importa que letra o nombre de equipo tenga la unidad compartida


Espero te sirva la ayuda 


Saludos

Alvaro Castellar

Cristhian Martínez

unread,
Jul 16, 2020, 11:03:35 AM7/16/20
to Visual Foxpro Latinoamérica
Gracias por la respuesta amigo
Hice lo que me dijiste y algo más 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.  

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

Alvaro Castellar

unread,
Jul 16, 2020, 11:48:25 AM7/16/20
to Visual Foxpro Latinoamérica
Hola cristian es que asi como yo te dije no tienes que usar el IF,  la conexion deberia ser la misma tanto para el equipo servidor como para la estacion no comprendo porque conectas de forma diferente.
Message has been deleted

Cristhian Martínez

unread,
Jul 16, 2020, 1:59:38 PM7/16/20
to Visual Foxpro Latinoamérica
Hola Alvaro
Escribo esta parte del código con el IF para diferenciar si el sistema arranca desde el servidor o desde la estación.

Ya que al arrancar el sistema desde la estación, busca las tablas en la PC estación y me da error porque no las encuentra, siendo que las tablas están el servidor.
No se si a esto te referías.
Recalco que me ha funcionado perfectamente escribiendo directamente la dirección de las tablas en el servidor  dejando el código en el cual están los comentarios "&&Asi funciona"
La única diferencia sería que en vez de poner el nombre del servidor "maedi-pc", ponga una variable con este nombre. Eso es lo que quise hacer en las lineas con los comentarios &&Asi no funciona.

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

Gracias

Cristhian Martinez

Alvaro Castellar

unread,
Jul 16, 2020, 2:21:34 PM7/16/20
to vfpl...@googlegroups.com
para mi no lo necesitas,  esas dos lineas funcionan tanto para el equipo servidor como para la estacion haz la prueba y te daras cuentas, omite todo las lineas que serian para la estacion,


SET PATH TO CURDIR(),tablas,informes
OPEN DATABASE  productos  SHARED
WAIT WINDOW 'Iniciando sesión en el programa ' TIMEOUT 1
DO FORM rotulo
READ EVENTS

Pruebalo asi desde el servidor y desde la estacion, veras que te funciona. 

El jue., 16 jul. 2020 a las 12:53, Cristhian Martínez (<cristhi...@gmail.com>) escribió:
Hola Alvaro
Escribo esta parte del código para diferenciar si el sistema arranca desde el servidor o desde la estación, ya que si solamente dejo esta parte 

SET PATH TO CURDIR(),tablas,informes
OPEN DATABASE  productos  SHARED

Ya que al arrancar el sistema desde la estación, busca las tablas en la PC estación y me error porque no las encuentra, siendo que las tablas están el servidor.
No se si a esto te referías.
Recalco que me ha funcionado perfectamente escribiendo directamente la dirección de las tablas en el servidor  dejando el código en el cual están los comentarios "&&Asi funciona"
La única diferencia sería que en vez de poner el nombre del servidor "maedi-pc", ponga una variable con este nombre. Eso es lo que quise hacer en las lineas con los comentarios &&Asi no funciona.

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

Gracias

Cristhian Martinez

El jueves, 16 de julio de 2020 a las 11:48:25 UTC-4, alvaroc...@gmail.com escribió:

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Visual Foxpro Latinoamérica" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/vfplatino/fH2LEJ5faDk/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a vfplatino+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/vfplatino/e45a4eff-31ee-4c4e-9eb3-8b89e768b382n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages