Error al conectarse al servidor

278 views
Skip to first unread message

Ultraton500

unread,
Aug 31, 2016, 10:33:44 AM8/31/16
to Comunidad de Visual Foxpro en Español
Buen día colegas,
al intentar conectar desde mi notebook a una db ubicada en mi PC recibo el siguiente mensaje de error:

No entiendo si se el error es que no se pudo conectar al servidor o que no puede encontrar el archivo de db. La cuestión es que localmente la conexión se realiza sin problemas.
Uso FoxyDB y las cadenas de conexión para el acceso local y remoto respectivamente son:

DRIVER={Firebird/InterBase(r) driver};;SERVER=localhost:3050;UID=sysdba;PWD=masterkey;DATABASE=C:\sistema\Cotizador_(Firebird)\DB_COTIZADOR.FDB;

DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=T:\DB_COTIZADOR.FDB;

El directorio remoto donde se encuentra la db tiene permiso de lectura y escritura
He buscado pero no he podido encontrar información que me ayude a resolverlo y por eso acudo a ustedes para ver si alguien ve algún problema en la cadena de conexión o si tiene alguna idea de qué es lo que puede estar pasando.
Desde ya les agradezco cualquier comentario.

Saludos cordiales,
Javier.

Antonio Meza

unread,
Aug 31, 2016, 11:11:00 AM8/31/16
to Comunidad de Visual Foxpro en Español
Imagino que la unidad T: es una unidad de red conectada al servidor? si es así no es correcto, ya que el servidor de firebird solo puede abrir las bases de datos que están localmente y al ser una unidad de red lo toma como externa.

Prueba así cambiando el nombre del servidor o pon la IP en vez del nombre

DRIVER={Firebird/InterBase(r) driver};SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=C:\sistema\Cotizador_(Firebird)\DB_COTIZADOR.FDB;

saludos
Antonio Meza

Ultraton500

unread,
Aug 31, 2016, 3:47:38 PM8/31/16
to Comunidad de Visual Foxpro en Español
Qué tal Antonio... gracias por responder.

En realidad T es una unidad virtual creada durante las pruebas a partir del directorio donde se encuentra la db. Ese directorio es "coti_red" de la PC (llamada "JAVIER-PC") por lo cual también probé con 

DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=\\JAVIER-PC\coti_red\DB_COTIZADOR.FDB;

y también con 

DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=\\192.168.0.20\coti_red\DB_COTIZADOR.FDB;

pero el error sigue apareciendo.

Antes de conectarme verifico con IF FILE() si el archivo de db se encuentra en la ruta especificada para la conexión y efectivamente lo encuentra pero no sé por qué en la conexión no.

Gracias nuevamente.
Saludos,
Javier.

mapner

unread,
Aug 31, 2016, 3:59:06 PM8/31/16
to Comunidad de Visual Foxpro en Español
Hola,

Lo que está diciendo es que el file FDB definido en el string de conexión ODBC no puede ser ubicado en el servidor.
Verifica que el path\archivo.fdb sea correcto y a su vez revisa en el archivo de configuración FIREBIRD.CONF en el directorio de instalación de Firebird, en la entrada # Database Paths/Directories
Ahí se puede poner DatabaseAccess = Full para indicar que los FDB pueden estar en cualquier unidad/path del servidor.

Saludos

Ultraton500

unread,
Aug 31, 2016, 9:42:30 PM8/31/16
to Comunidad de Visual Foxpro en Español
Hola mapner, gracias por la ayuda.

Modifiqué el FIREBIRD.CONF estableciendo DatabaseAccess = Full y reinicié el servicio de Firebird pero el error persistía.
Seguí haciendo pruebas y logré conectarme usando las rutas "\\JAVIER-PC\C:\coti_red\DB_COTIZADOR.FDB" y "\\192.168.0.20\C:\coti_red\DB_COTIZADOR.FDB", es decir, le agregué la letra de la unidad a las rutas con las que anteriormente no había podido conectarme.

El algo nuevo para mi que la función FILE() de VFP no encuentra el archivo de db si la ruta contiene la letra de la unidad cuando se trata de una ruta remota. Por este motivo cuando la ruta era correcta para la conexión esta no llegaba a realizarse porque la función FILE() no encontraba la db y cuando la función FILE() encontraba la db la ruta no era la correcta para realizar la conexión.
De todas formas una vez que logré realizar conexiones exitosas probé activar y desactivar DatabaseAccess en el FIREBIRD.CONFy no cambió nada... siempre pude conectarme.

Gracias Antonio, gracias mapner por su ayuda.

Saludos cordiales,
Javier.

HernanCano

unread,
Sep 1, 2016, 1:52:22 AM9/1/16
to Comunidad de Visual Foxpro en Español
Hola, Javier.
Permíteme una intervención. Espero no "ensuciar" el hilo (lo digo con respeto). Si no entienden, sólo pasenlo por alto.

Veamos....

En la primera cadena de conexión de ejemplo que usas observa que el parámetro SERVER dice que el servidor se llama SERVERHP; pero en el nombre de la base de datos estás diciendo que está ubicada en un compulador llamado JAVIER-PC . Probablemente ésto confunde al driver.

En la tercera cadena de conexión de ejemplo que usas observa que el parámetro SERVER dice que el servidor se llama SERVERHP; y en el nombre de la base de datos estás diciendo que está ubicada en un disco cuya letra es T: . Voy a suponer que la letra es una letra que usas en una de las estaciones de la red desde donde estás intentando la conexión. Por lo tanto el disco T: no corresponde a una letra del computador SERVERPC. La conclusión es la misma del párrafo anterior.


DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=\\JAVIER-PC\coti_red\DB_COTIZADOR.FDB;

DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=\\192.168.0.20\coti_red\DB_COTIZADOR.FDB;

DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=T:\DB_COTIZADOR.FDB;


Ahora: la función FILE() funciona como debe ser, pues evidentemente estás utilizando la "ruta" completa (FullPath) del archivo.fbd desde la estación que estás ejecutando la aplicación. Desde VFP se reconoce bien la ruta en cualq de las dos formas de la base de datos ( <1> C:\sistema\Cotizador_(Firebird)\DB_COTIZADOR.FDB, <2> T:\DB_COTIZADOR.FDB ).

Pregunta: if file("\\JAVIER-PC\COTI_RED\DB_COTIZADOR.FDB") te da VERDADERO?

PERO ENTONCES DEBES SINCRONIZAR el nombre del servidor con la ubicación de la bdatos (perdón la mayúscula, no es para gritarte, sólo resaltar la idea).
----------------------------------------------------------
Releyendo tus comentarios, observo además que pudiste lograr conexión exitosa con 

\\JAVIER-PC\C:\coti_red\DB_COTIZADOR.FDB

lo que me da a entender que el directorio que se llama COTI_RED no parece compartido... Si estuviera compartido, la forma \\JAVIER-PC\COTI_RED\DB_COTIZADOR.FDB sería correcta ....... (( de todas formas dependemos de lo mencionado en el primera parte )).

-------------------------------------------------------------------
Si encuentras algo con lo que te menciono (y entiendes lo que te menciono), comenta.

Chao.

mapner

unread,
Sep 1, 2016, 8:49:45 AM9/1/16
to Comunidad de Visual Foxpro en Español
Una cosa importante en Firebird (o cualquier motor bd cliente servidor) La aplicación cliente en VFP (o cualquier lenguaje) no debe tener visibilidad y acceso directo al file físico de la base de datos. En firebird se puede usar un archivo de configuración llamado ALIAS.CONF para enmascarar con un nombre simbólico el path/nombrearchivo.fdb

Ultraton500

unread,
Sep 1, 2016, 12:42:33 PM9/1/16
to Comunidad de Visual Foxpro en Español
Hola Hernan, tu comentario es bienvenido.

- Con respecto a que el nombre del server y la ruta de la db son distintos y pueden confundir al driver te comento que a la cadena de conexión la arma la librería FoxyDB, yo solo aporto la ruta de la db.

- Con respecto a la 2da. observación... en realidad la unidad "T" es un experimento, es una unidad virtual creada para probar una forma alternativa de referirse al directorio donde se encuentra la db que es el directorio "coti_red" de la PC (llamada "JAVIER-PC"), pero ya no hago mas referencia a esa unidad.

- Con respecto a la función FILE():

La línea  MESSAGEBOX(FILE("\\JAVIER-PC\coti_red\DB_COTIZADOR.FDB")) devuelve .T.

La línea  MESSAGEBOX(FILE("\\JAVIER-PC\C:\coti_red\DB_COTIZADOR.FDB")) devuelve .F.

- Por último la carpeta "coti_red" aparece como compartida. Para estas pruebas tiene configurado el acceso de lectura y escritura para todos.

Te pido disculpas si no he interpretado bien tus comentarios porque en lo que se refiere a redes soy un grandísimo ignorante, es algo que me cuesta muchísimo. Por eso es que no sé qué es eso de sincronizar el nombre del servidor con la ubicación de la db. Pero bueno tendré que dejarlo para cuando pueda dedicarle tiempo, ahora encontré la forma de que esto funcione y tengo que seguir porque hace dos días que esto me tenía varado.

Saludos,
Javier.

Esteban H

unread,
Sep 1, 2016, 7:39:54 PM9/1/16
to publice...@googlegroups.com

Yo hago justo lo q comentó mapner, enmascaro la conexión definiéndola en Alias.conf, y las configuraciones son más sencillas y chau Path y nombre de la DB.

 

Saludos.

 

Esteban.

 

Ultraton500

unread,
Sep 3, 2016, 1:34:34 AM9/3/16
to Comunidad de Visual Foxpro en Español, er...@yahoo.com.ar
Qué tal Esteban...Una vez que pudiera establecer conexiones sin problemas tenía pensado implementar los alias como indica mapner, había leído sobre el el tema hace mucho tiempo y no recordaba que al hacerlo me ahorro los problemas de la ruta de a db.
Acabo de probarlo y funciona fantástico.
Gracias mapner!!

Saludos,
Javier.

HernanCano

unread,
Sep 3, 2016, 12:31:34 PM9/3/16
to Comunidad de Visual Foxpro en Español
Bien.

>>> - Con respecto a que el nombre del server y la ruta de la db son distintos y pueden confundir al driver te comento que a la cadena de conexión la arma la librería FoxyDB, yo solo aporto la ruta de la db

Lo que quiero decir es que si el servidor es SERVERHP, entonces la ruta de la bdatos no puede ser en T:. Lo que debes hacer es lo que dijo Antonio (lo corrijo aquí):

--- Así lo tienes tú:

((en el mismo computador, local))
DRIVER={Firebird/InterBase(r) driver};;SERVER=localhost:3050;UID=sysdba;PWD=masterkey;DATABASE=C:\sistema\Cotizador_(Firebird)\DB_COTIZADOR.FDB;

((en una estación de la red))
DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=T:\DB_COTIZADOR.FDB

((así debería ser en una estación de la red))
DRIVER={Firebird/InterBase(r) driver};SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=C:\sistema\Cotizador_(Firebird)\DB_COTIZADOR.FDB;

Tip: Observa que la ruta de la dbatos es la misma aunque el servidor cambie. ((( ¡¡¡Sólo cambia el servidor!!! )))



>>> - Con respecto a la función FILE():
>>> La línea  MESSAGEBOX(FILE("\\JAVIER-PC\coti_red\DB_COTIZADOR.FDB")) devuelve .T.
>>> La línea  MESSAGEBOX(FILE("\\JAVIER-PC\C:\coti_red\DB_COTIZADOR.FDB")) devuelve .F.

Si la primera devuelve true, entonces la carpeta COTI_RED sí está compartida.
Si la segunda devuelve false, entonces es porque la sintaxis es inválida. ¿Por qué estás usando esta sentencia?

>>> ... sincronizar el nombre del servidor con la ubicación de la db....

La palabra "sincronizar" es usada por mí aquí para expresar la idea: no es un concepto generalizado. (((( Cuando digo sincronizar me refiero a lo que digo en el primer punto: Si en la cadena de conexión usas SERVER=SERVERHP,  entonces la ruta de la bdatos nunca puede ser DATABASE=T:\DB_COTIZADOR.FDB pues la unidad T: no existe el el servidor ---SI EXISTE EN UNA ESTACION---. Si en la cadena de conexión usas SERVER=SERVERHP,  entonces la ruta de la bdatos es DATABASE=C:\sistema\Cotizador_(Firebird)\DB_COTIZADOR.FDB pues la ruta C:\sistema\Cotizador_(Firebird)\ sí existe el el servidor )))).

HernanCano

unread,
Sep 3, 2016, 12:38:44 PM9/3/16
to Comunidad de Visual Foxpro en Español
----- Ultraton escribió: ------------------

El algo nuevo para mi que la función FILE() de VFP no encuentra el archivo de db si la ruta contiene la letra de la unidad cuando se trata de una ruta remota. Por este motivo cuando la ruta era correcta para la conexión esta no llegaba a realizarse porque la función FILE() no encontraba la db y cuando la función FILE() encontraba la db la ruta no era la correcta para realizar la conexión.

----- Hernán escribe: ------------------

Javier:
Quisiera entender ésto que dices.

Primero: 
¿Puedes mostrar el código que tienes para ésto?

Segundo:
¿Con qué valores funciona de una forma? ¿Se realiza la conexión? ¿Qué es lo que notas extraño en este caso?

Tercero:
¿Con qué valores funciona de la otra forma? ¿Se realiza la conexión? ¿Qué es lo que notas extraño en este caso?


Ultraton500

unread,
Sep 3, 2016, 8:10:30 PM9/3/16
to Comunidad de Visual Foxpro en Español
>>> Lo que quiero decir es que si el servidor es SERVERHP, entonces la ruta de la bdatos no puede ser en T:. Lo que debes hacer es lo que dijo Antonio (lo corrijo aquí):

Es por eso entonces que con T: no funcionaba y por eso ya no lo uso así.

--------------------------------------------------------------------------
Por otra parte me doy cuenta de que cuando escribí

...La cuestión es que localmente la conexión se realiza sin problemas.
Uso FoxyDB y las cadenas de conexión para el acceso local y remoto respectivamente son:

DRIVER={Firebird/InterBase(r) driver};;SERVER=localhost:3050;UID=sysdba;PWD=masterkey;DATABASE=C:\sistema\Cotizador_(Firebird)\DB_COTIZADOR.FDB;

DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=T:\DB_COTIZADOR.FDB;

fue solo para demostrar que no tenía problemas para acceder localmente a una db del servidor pero no aclaré que esa db a la que podía acceder localmente es una distinta a la que intentaba acceder remotamente. Es decir que la unidad virtual "T" (que ya descarté) no fue creada a partir del directorio C:\sistema\Cotizador_(Firebird) sino del directorio C:\coti_red al cual tengo acceso de lectura y escritura. Así que me disculpo por esa falta de aclaración que pasé por alto.

--------------------------------------------------------------------------
En cuanto a 

Tip: Observa que la ruta de la dbatos es la misma aunque el servidor cambie. ((( ¡¡¡Sólo cambia el servidor!!! )))

a mi me pasa lo siguiente:

la cadena DRIVER={Firebird/InterBase(r) driver};;SERVER=localhost:3050;UID=sysdba;PWD=masterkey;DATABASE=C:\coti_red\DB_COTIZADOR.FDB; se conecta sin problemas (localmente: desde la aplicación en el servidor a la db en el servidor).

la cadena DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=C:\coti_red\DB_COTIZADOR.FDB; me devuelve el error 1526 ..."File database is not found".

y la cadena DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=\\JAVIER-PC\C:\coti_red\DB_COTIZADOR.FDB; se conecta sin problemas (remotamente: desde la aplicación en una terminal a la db en el servidor).

Es decir que para que funcione tengo que indicar en la ruta el nombre del servidor.
De todas formas al igual que Esteban implementé un alias y estoy pudiendo conectarme remotamente sin necesidad de especificar la ruta de la db pero siempre indicando el nombre del servidor con la siguiente línea.

DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=\\JAVIER-PC\cotdb;

--------------------------------------------------------------------------
La función FILE() estaba para verificar si el archivo de db existía en el directorio que el usuario especificaba la 1ra. vez que se ejecutaba la aplicación. Pero ese era un concepto erróneo y ahora que uso un alias esta verificación ya no se hace y por eso ya no uso la función FILE().

Saludos cordiales,
Javier.

mapner

unread,
Sep 3, 2016, 9:50:07 PM9/3/16
to Comunidad de Visual Foxpro en Español
Lo que no se entiende es: si finalmente estás usando un alias, para que indicas la doble barra en \\JAVIER-PC\cotdb ..? El alias es un nombre simbólico que no tiene por que incluir una estructura de path. A su vez, si no fuera un alias y efectivamente fuera un path, la doble barra inicial en Windows indica un recurso compartido de red y las bd de Firebird siempre deben residir en discos locales del servidor.

Ultraton500

unread,
Sep 4, 2016, 12:35:27 AM9/4/16
to Comunidad de Visual Foxpro en Español
Gracias mapner por la información.
Ya le he quitado la doble barra inicial por lo que la cadena de conexión ahora me queda así:

DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=JAVIER-PC:cotdb;

Saludos cordiales,
Javier.

HernanCano

unread,
Sep 4, 2016, 11:51:05 PM9/4/16
to Comunidad de Visual Foxpro en Español
Listo, compadre.

>>> ...  la unidad virtual "T" (que ya descarté) no fue creada a partir del directorio C:\sistema\Cotizador_(Firebird) sino del directorio C:\coti_red ...

Bueno, como el escenario cambia... todo bien....

>>> ... y la cadena DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=\\JAVIER-PC\C:\coti_red\DB_COTIZADOR.FDB; se conecta sin problemas...remotamente:...

Si te funciona, magníficio. Pero cuéntame: ¿utilizas el motor embebido o no?

>>>... la cadena DRIVER={Firebird/InterBase(r) driver};;SERVER=SERVERHP:3050;UID=sysdba;PWD=masterkey;DATABASE=C:\coti_red\DB_COTIZADOR.FDB; me devuelve el error 1526 ..."File database is not found".

Lo lamento... deberé ensayar muchas cosas... (pero por ahora no puedo, pues estoy recibiendo error de que no se encuentra ISO8859_1....para cuaq FDB....).

Seguimos en contacto.

Ultraton500

unread,
Sep 5, 2016, 3:24:11 PM9/5/16
to Comunidad de Visual Foxpro en Español
Hola Hernán... no, no estoy utilizando el embedded.
Te mando un cordial saludo y agradezco nuevamente tu apoyo.

Javier.
Reply all
Reply to author
Forward
0 new messages