Ir al contenido


Foto

Conexion "remota" a una BD Firebird


  • Por favor identifícate para responder
14 respuestas en este tema

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 20 abril 2015 - 01:13

Jovenes ilustres tengo un problema que necesito ayuda de ustedes...

 

 

 

 

No tengo dinero $  :  :

 

 

Pasando a términos serios e importantes, resulta que una aplicación que tengo ya funcionando como aplicación con base de datos local me han pedido que una instancia de la misma se pueda ejecutar en una maquina remota. Eso es algo que nunca he hecho así que pido su ayuda (peras y manzanas por favor ). En materia:

 

La ruta de mi proyecto original:


php
  1. Programa original con la base de datos en local (127.0.0.1)
  2.  
  3. IP: 192.168.0.105 //Esta es la IP publica (no fija) de la maquina
  4.  
  5. C:\MisDesarrollos\Data\MiDB.fdb
  6. C:\MisDesarrollos\MiAplicacion.exe
  7. C:\MisDesarrollos\fbClient.dll

Mi conexion con la BD (Uso Unidac y provider Interbase) que es Firebird 2.5

 


php
  1. procedure TdmDatabase.DataModuleCreate(Sender: TObject);
  2. begin
  3.   uniConexion.ProviderName := 'InterBase';
  4.   uniConexion.Server := '127.0.0.1';
  5.   uniConexion.SpecificOptions.Add('InterBase.Charset=UTF8');
  6.   uniConexion.SpecificOptions.Add('InterBase.ClientLibrary=fbclient.dll');
  7.   uniConexion.Database := GetCurrentDir + '\Data\' + NombreBD;
  8.   
  9. end;

Al iniciar la aplicación el el Source del proyecto:


php
  1. Application.CreateForm(TdmDatabase, dmDatabase);
  2. if not dmDatabase.Conectar then
  3. begin
  4. FreeAndNil(dmDatabase);
  5. end;

La función Conectar


php
  1. function TdmDatabase.Conectar: Boolean;
  2. begin
  3. Result := true;
  4.  
  5. if uniConexion.Connected then
  6. uniConexion.Connected := false;
  7.  
  8. try
  9. uniConexion.Connected := true;
  10. except
  11. on E: Exception do
  12. begin
  13. ShowMessage(Format(errConectarBD, [E.Message]));
  14. Result := False;
  15. end;
  16. end;

Hasta ahí todo me funciona correctamente, no hay problema alguno.

 

Ahora creo que lo que debo de modificar es solamente en el Create del Form para la aplicación cliente:


php
  1. procedure TdmDatabase.DataModuleCreate(Sender: TObject);
  2. begin
  3. uniConexion.ProviderName := 'InterBase';
  4. uniConexion.Server := '192.168.0.105';
  5. uniConexion.SpecificOptions.Add('InterBase.Charset=UTF8');
  6. uniConexion.SpecificOptions.Add('InterBase.ClientLibrary=fbclient.dll');
  7. uniConexion.Database := '192.168.0.105\C:\MiAplicacion\Data\' + NombreBD;
  8. end;

Es correcto lo que estoy haciendo o echo marcha atras?

 

Cuando intente ejecutar me apareció el mensaje de que "no podia conectar con 192.168.0.105"

 

como siempre agradezco su ayuda y tiempo!


  • 0

#2 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 20 abril 2015 - 03:54

por aqui hay una solución:

 

http://www.clubdelph...ead.php?t=57235

 

Espero te sirva :)


  • 1

#3 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 20 abril 2015 - 05:00

por aqui hay una solución:

 

http://www.clubdelph...ead.php?t=57235

 

Espero te sirva :)

 

Si buscando encontre lo del puerto (  :(  :(  mea culpa en un foro de vb)

 

y cambie la sentencia siguiente:


delphi
  1. uniConexion.Database := '192.168.0.105\C:\MiAplicacion\Data\' + NombreBD;
  2.  
  3. Por
  4.  
  5. uniConexion.Database := '192.168.0.105:C:\MiAplicacion\Data\' + NombreBD;

Ya no me da el error de la conexion a la BD sin embargo me aparece otro en el que me dice que "La Base de datos no esta disponible"

 

falta resolver ese :) 


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 20 abril 2015 - 05:08

Mejor renombra fbclient.dll por gds32.dll.

Saludos.
  • 0

#5 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 21 abril 2015 - 05:51

¿ Has redirigido el puerto 3050 en el router ?. No solo tienes que abrirlo en el firewall sino que además tienes que asegurarte que todas las conexiones que lleguen por este puerto desde el exterior (llegan al router), sean redirigidas al equipo con el servidor Firebird. Tienes que entrar en la configuración de tu router de Internet y añadir esa redirección en el apartado de NAT (Network Address Translation).

 

La dirección IP pública no puede ser 192.168.0.105. Esta es la dirección IP local de tu equipo Firebird en la red local (en cambio 127.0.0.1 es la dirección genérica de localhost que apunta siempre al mismo equipo desde que se lanza). Pero para direccionar un equipo externo tienes que ponerle la dirección pública de tu conexión a Internet.

 

Entra en esta página y te dirá cual es tu IP pública : http://whatismyipaddress.com/

 

Por cierto, si tu conexión a Internet es con IP dinámica (es decir, que varia cada vez que conectas a Internet), entonces en lugar de tener que estar siempre notificando la nueva dirección, es mucho más cómodo utilizar un servicio de DNS dinámico. Como este : http://www.noip.com/

 

Saludos.


  • 2

#6 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 22 abril 2015 - 02:16

Gracias Marc.

 

Para evitarme problemas (y no entrar en cosas raras aun)  mientras pruebo todo esto solo hice la conexion Pc = Switch = PC (197.168.0.105 = Switch = 197.168.0.115) , ya no me aparecen mensajes de "No puedo conectar con Host ". Hice ping desde ambas PC y hacia ambas pc y sin problemas, sin embargo al ejecutar la aplicacion cliente me aparece el mensaje de "Database unavailable".

 

Por otro lado la aplicacion cliente esta ejecutamdose en Win XP y la servidora en Win 7 64bits. ¿Algun ajuste necesario?


  • 0

#7 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 23 abril 2015 - 06:36

No, no hay que configurar nada especial para mezclar clientes y servidores a 32 y 64bits. Es independiente de Firebird.

 

Por lo que dices probablemente tengas un firewall bloqueando el puerto 3055 en tu PC servidor (Windows viene con un Firewall personal propio y todos los antivirus suelen venir con otro).


  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 23 abril 2015 - 08:57

Por el lado cliente de lo que te tienes que asegurar es de tener la versión correcta de la biblioteca cliente apropiada para la arquitectura. Si es un 32bits, usas el fbclient 32bits y si es 64 el correspondiente. Obviamente, que sea correspondiente a la versión de Firebird que se instala también.

 

El resto es hacer que apunten como señala marc a la IP correcta.

 

Saludos,


  • 0

#9 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 23 abril 2015 - 10:59

No, no hay que configurar nada especial para mezclar clientes y servidores a 32 y 64bits. Es independiente de Firebird.

 

Por lo que dices probablemente tengas un firewall bloqueando el puerto 3055 en tu PC servidor (Windows viene con un Firewall personal propio y todos los antivirus suelen venir con otro).

 

¿Puerto 3055? ¿No debería ser 3050?

 

Por otro lado si esta verificado que la versión de fb es la misma en ambas PC. (FB 2.5.3.26778 de 32 bits)

 

Gracias por el interés!


  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 23 abril 2015 - 11:59

Puede que se haya sido un desliz de marc. Si, es el 3050 a menos que tu lo configures para que sea otro.

Ojo: los eventos de Firebird, por defecto, se transmiten por otro puerto (que esté libre) asi que si haces uso de esta funcionalidad de Firebird deberás repetir el procedimiento en el router para que el cliente los capture. Lo más sano es configurar Firebird para que los eventos vayan por un puerto que tu designes.

 

Saludos,


  • 1

#11 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 23 abril 2015 - 02:05

¿Puerto 3055? ¿No debería ser 3050?

 

Por otro lado si esta verificado que la versión de fb es la misma en ambas PC. (FB 2.5.3.26778 de 32 bits)

 

Gracias por el interés!

 

Sí, en efecto, el 3050, ¿ en que estaría pensando ?. :tongue:

 

Por el lado cliente de lo que te tienes que asegurar es de tener la versión correcta de la biblioteca cliente apropiada para la arquitectura. Si es un 32bits, usas el fbclient 32bits y si es 64 el correspondiente. Obviamente, que sea correspondiente a la versión de Firebird que se instala también.

 

El resto es hacer que apunten como señala marc a la IP correcta.

 

Saludos,

 

¿ Es necesario eso ?, yo aún distribuyo el mismo cliente en mi programa (el cliente 32bits con el programa Delphi también de 32bits) y funciona perfectamente en equipos 64bits.


  • 0

#12 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 23 abril 2015 - 03:10

Saludos.

 

@Marc, tal vez en los servidores al instalar la versión de 64bits (siempre y cuando el sistema operativo lo soporte) se le pueda sacar mayor provecho; también contando con una configuración adecuada el Firebird.


  • 0

#13 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 23 abril 2015 - 05:14

Es cierto que una aplicación 32bits puede ser ejecutada en un 64bits, al menos en Windows. Pero esto no aprovecha adecuadamente los recursos que ofrece. Es más, en un SO Windows 64bits las aplicaciones Windows 32 trabajan ineficientemente. Está documentado esto.

 

Pongo un caso, IBExpert, en la versión que tengo (no he visto los últimos updates) no cuenta con una versión 64bits por lo que debe emplearse la biblioteca a 32bits. Tengo instalado FB 2.5 en 64bits. y si es una pena tener que desaprovechar semejante poder. Los de IBExpert se lamentaban no ofrecer una versión 64bits, decían estar trabajando en mejoras. Eso mismo decían en su FAQ, cuando estaba leyendo sobre si podría trabajar.

Ellos mismos documentaron que debe bajarse la dll32 y apuntar a ésta si se está usando 64bits. Porqué no se... pero por algo será ;)

 

Puede parecer algo minúsculo pero no lo es.

 

Saludos,


  • 0

#14 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 28 abril 2015 - 10:21

Un proverbio Zen dice que "La naturaleza del cielo originalmente es clara, a fuerza de mirarlo la vista se oscurece"

 

Pues deje por la paz este proyecto, me dedique a otras cosas y voy a retomarlo porque no he podido hacer que desaparezca ese "database unavailable"

 

Seguro es una tonteria, pero esas son las que mas cuesta encontrar.

 

Saludos !!


  • 0

#15 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 29 abril 2015 - 12:20

Fgarcia has instalado ibexpert, porque te seria de mucha ayuda para hacer pruebas.
Cuando te aparezcan los errores sera mas facil ayudarte.
Tambien puedes crear una direccion con no-ip o dyndns y darla a algunos de nosotros para intentar conectarnos y ver que error nos da.
Ya luego cambias esa direccion en no-ip o dyndns y listo
  • 0




IP.Board spam blocked by CleanTalk.