FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Error al conectar Firebird en red
Primero que nada decir que pongo esta pregunta aquí porque creo que es donde debe ir. Si los administradores consideran más correcto situarla en otro sitio, adelante.
Hace tiempo pedí ayuda para poder conectar una aplicación hecha en BCB 6 a una base de datos Firebird en red. Me distéis una solución en aquel hilo (Conectar Firebird en red). Voy a explicar lo que estoy haciendo en el programa para conectar a la BB.DD. 1. Los valores de la ruta deacceso los guardo en un fichero ini con estos valores: Cita:
Código:
GetPrivateProfileString("DATOS", "Entorno" , "C:\\DatAfi30\\" , cEntorno , sizeof(cEntorno) , (ExtractFilePath(Application->ExeName) + "PtoDat30.ini").c_str()); GetPrivateProfileString("DATOS", "Tablas" , "C:\\DatAfi30\\Tablas", cTablas , sizeof(cTablas) , (ExtractFilePath(Application->ExeName) + "PtoDat30.ini").c_str()); GetPrivateProfileString("DATOS", "Seguridad", "" , cSeguridad, sizeof(cSeguridad), (ExtractFilePath(Application->ExeName) + "PtoDat30.ini").c_str()); 2. Asigno el nombre de la BB.DD. en el elemento TIBDatabase. Código:
fMenu->GesInt->DatabaseName = AnsiString(cTablas) + "GesInt.fdb"; Código:
bool TInicio::CreaDb() { try { if (FileExists(AnsiString(cTablas) + "GesInt.fdb")) return true; fForBln->IniBarra("Creando base de datos"); fMenu->Auxiliar->Transaction->Active = false; fMenu->Query->Transaction->Active = false; fMenu->GesInt->Connected = false; fMenu->GesInt->DatabaseName = AnsiString(cTablas) + "GesInt.fdb"; fMenu->GesInt->SQLDialect = 3; fMenu->GesInt->Params->Clear(); fMenu->GesInt->Params->Add("USER 'sysdba'"); fMenu->GesInt->Params->Add("PASSWORD 'masterkey'"); fMenu->GesInt->Params->Add("PAGE_SIZE 4096"); fMenu->GesInt->Params->Add("DEFAULT CHARACTER SET ISO8859_1 COLLATION ES_ES_CI_AI"); fMenu->GesInt->CreateDatabase(); } catch(Exception &Exc) { return false; } return true; } Hemos comprobado que el puerto 3050 está abierto en ambas máquinas y en desde el equipo cliente se puede ver en el explorador de Windows la BB.DD. en el servidor. He estado mirando cosas por la red sobre conexión de Firebird en red y todas las soluciones apuntan a las sugerencias del hilo que citaba antes. ¿Podéis darme una pista de qué puedo hacer para solucionar este problema? |
#2
|
||||
|
||||
Para probar he cambiado el punto de ejecución de ese FileExists al punto justo anterior al que llama a esa función y sigue dando el mismo error.
|
#3
|
||||
|
||||
Si Tablas es: C:\\DatAfi30\\Tablas
Y haces fMenu->GesInt->DatabaseName = AnsiString(cTablas) + "GesInt.fdb"; Entonces obtienes: C:\\DatAfi30\\TablasGesInt.fdb
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
||||
|
||||
Cita:
Cita:
|
#5
|
||||
|
||||
¿"Juani" es un directorio o un alias?
¿Y si pruebas manualmente, conecta? 192.168.1.100:/ruta/bd.fdb A ver si tienes firebird desactivado, o han instalado un antivirus o algo en el servidor y está cortando el acceso, o firewall...
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
||||
|
||||
Es el nombre de la máquina
Cita:
El problema es que hasta ayer por la mañana se conectaba sin problemas. He seguido haciendo pruebas y me he encontrado que si elimino esa comprobación de si existe la BB.DD. funciona a la perfección y arranca sin problemas. Si encontrara la forma de hacer un log de depuración con alguna librería o algo me ayudaría muchísimo. Sigo investigando. |
#7
|
||||
|
||||
Cita:
Y un servidor no debe tener nada compartido. Firebird solamente necesita que esté el puerto 3050 abierto, para que puedan comunicarse por él, nada más.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#8
|
||||
|
||||
Cita:
Última edición por Angel.Matilla fecha: 23-02-2022 a las 18:45:10. |
#9
|
||||
|
||||
Que tal,
A mi me parece mas que va por la exclusividad que tiene el proceso de FBServer para con el archivo fisico (FDB) y este no le concede "permiso" a otro proceso para tener alguna operacion con el archivo.
__________________
Ya tengo Firma! |
#10
|
||||
|
||||
Es que el servidor de BD debe ser "cerrado", nadie debe tener acceso a él, la única "puerta abierta" es el puerto 3050 (en este caso) para que pueda recibir peticiones. El cliente pide, el servidor responde.
Pero un programa cliente (o programas cliente en distintos ordenadores) no debe tener acceso al servidor, y mucho menos crear una base de datos allí. El servidor debe tratarse como una fortaleza inexpugnable. Los clientes no pueden conectarse, ver lo que hay, crear bases de datos, borrarlas, etc. todo eso es un gran peligro. En tu caso, supongo que en el servidor se está ejecutando el programa, y en los terminales se está ejecutando un acceso directo al mismo. Si tu programa lo hace, aunque no es un buen método, y tienes implementada esas opciones, tal vez el problema sea de permisos, por eso antes podía y ahora no.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#11
|
||||
|
||||
Al margen de que por error he borrado mi contestación anterior, tu sugerencia es buena pero si esa exclusividad estuviera presente no permitiría ningún tipo de acción sin los permisos pertinentes, que están concedidos. El problema reside en que antes, con el mismo código, funcionaba bien y ahora no y me estoy volviendo loco tratando de averiguar el por qué.
|
#12
|
||||
|
||||
Claro que no, no es su cometido, pero si lo haces así, bueno, pues vale, ya depende de ti y los requesitos que necesites para mantenerlo así o cambiarlo
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#13
|
||||
|
||||
No recuerdo ahora mismo que exista ningún tipo de exclusividad.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#14
|
||||
|
||||
Una pregunta, que estaba en el mensjae que he borrado antes por error: ¿Cómo hacéis en una instalación de red para comprobar si existe la BB.DD. o un fichero?
|
#15
|
||||
|
||||
Cita:
No es desempeño de un programa cliente mirar qué hay en un servidor. Los programas clientes conectan a la dirección que le han dado, nada más, y si no conecta deberán revisar el servidor qué problema tiene. Es como si tú entras a una página web y te dice que no puede conectar, tú no puedes desde tu navegador cliente mirar si está algún fichero o la BD en el servidor web.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#16
|
||||
|
||||
Gracias. No me lo había planteado así porque la misma aplicación es la que uso pera el servidor y los clientes. Tengo que replantear la forma de conectarse los equipos.
De todas maneras me está ocurriendo una cosa muy curiosa: Si uso el código tal como lo tengo ahora: Código:
GetPrivateProfileString("DATOS", "Entorno", "C:\\DatAfi30\\", cEntorno, sizeof(cEntorno), (ExtractFilePath(Application->ExeName) + "PtoDat30.ini").c_str()); if (!FileExists(AnsiString(cEntorno) + "Tablas\\GesInt.fdb")) etc. Código:
if ("\\\\Depapel\\c\\DatAfi30\\Tablas\\GesInt.fdb")) etc. |
#17
|
||||
|
||||
Hecha un vistazo a esto, es que con tantas barras y demás me parece un poco engorroso. Estoy habituado a servidores linux, algo así: 192.168.1.100:/datos/labasedatos.fdb
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#18
|
||||
|
||||
Incluso así, tampoco debes permitirlo. Solamente conectar a la BD y hacer peticiones, nada más.
La diferencia si está en el servidor es que la ruta será localhost:/dondesea/basedatos.fdb
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#19
|
||||
|
||||
Tienes razón. Por eso digo que conservo demasiados vicios de mi época de programar en Clipper. Muchas gracias por toda la información. Me ha sido muy útil.
|
#20
|
|||
|
|||
Estimado Angel.Matilla, si me lo permite quisiera plantear otro punto de vista.
Creo que es muy practivo el uso de alias para indicar la base de datos de conexión, nos permite flexibilizar a que bases de datos nos conectaremos sin hacer mayores cambios a archivos de configuración... Para ello basta definir los alias a las base de datos en el archivo "Aliases.conf", ubicado en carpeta de instalacipón de firebird... Como ejemplo en Cita:
Cita:
Cita:
Saludos cordiales |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Error al conectar app con bd Firebird | Tiaguito_Power | Conexión con bases de datos | 5 | 28-08-2015 21:46:51 |
Error al conectar BD Firebird | Angel.Matilla | Firebird e Interbase | 28 | 13-10-2014 12:30:35 |
Ayuda con error al conectar a Firebird | Mauro® | Conexión con bases de datos | 9 | 20-02-2008 21:09:42 |
Error al conectar Firebird+MDO | brakaman | Conexión con bases de datos | 2 | 08-04-2007 23:49:10 |
Error al conectar con un BD de Firebird 1.5 con un BDPConnection | tarus | .NET | 2 | 06-06-2005 10:09:38 |
|