Ver Mensaje Individual
  #1  
Antiguo 23-02-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
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:
[DATOS]
Entorno=\\JUANI\DatAfi30
Tablas=JUANI/3050:C:\DatAfi30\Tablas
Seguridad=C:\Users\Usuario\Documents\Copia Seguridad
y lo leo, sobre las variables previamente definidas tipo char, con la típica instrucción:
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());
Esto he comprobado que lo hace bien y que los valores que recupera son los que están garabados.
2. Asigno el nombre de la BB.DD. en el elemento TIBDatabase.
Código:
fMenu->GesInt->DatabaseName = AnsiString(cTablas) + "GesInt.fdb";
3. Verifico que la base de datos existe:
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;
}
Y aquí es donde esta el problema porque al ejecutar el FileExists la aplicación le responde que no existe y trata de ejecutar la creación de dicha BB.DD. en las líneas siguientes, pero como ya existe lógicamente da error.

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?
Responder Con Cita