Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   saber si existe mi archivo datos.gdb (https://www.clubdelphi.com/foros/showthread.php?t=76226)

Manuel 17-10-2011 20:51:03

saber si existe mi archivo datos.gdb
 
tengo lo siguiente en mi sistema :

IBDatabase1.DatabaseName := 192.168.1.100:c:\datos\datos.gbd

Como podría saber antes de realizar esto y abrir mi base de datos, si existe el fichero a través de esta ruta 192.168.1.100:c:\datos\datos.gbd

Chris 18-10-2011 01:54:41

mmm... no sé me ocurre nada óptimo para tu caso Manuel.

Una solución fácil sería habilitar "Compartir archivos en red" y compartir la carpeta dónde está la base de datos. Pero esto sería un remedio peor que la enfermedad.

La solución única que se me ocurre es manejar el error devuelto por Firebird cuando el archivo de la base de datos. Pero esto requiere que se haga el intento de conexión y no estoy seguro si se verifican las credenciales antes de la existencia de la base de datos. Firebird 2.1 Error Codes.

Saludos!

Casimiro Notevi 18-10-2011 09:22:54

Puedes controlar si ha conectado o no, algo así:

Código Delphi [-]
try
  IBDatabase1.DatabaseName := 192.168.1.100:c:\datos\datos.gbb
  IBDatabase1.active := true;
except
  showmessage('no se pudo conectar');  // Esto no quiere decir que no exista, sólo que no se pudo conectar
end;

Pues eso, que puede existir, aunque no conecte.

Manuel 18-10-2011 15:41:52

Casimiro:

coloque tu sugerencia, pero no se ejecuta la excepción, solo me muestra los mensajes del sistema, no mi mensaje personalizado.

Casimiro Notevi 18-10-2011 16:25:12

Pon tu código, que lo veamos ;)

Manuel 18-10-2011 17:40:19

Es el mismo que me diste como ejemplo, lo coloco en el 'on create' del proyecto.

Manuel 18-10-2011 17:41:17

rectifico el el on create del 'Data Module' del proyecto.

Casimiro Notevi 18-10-2011 17:54:09

¿Y ejecutas el programa desde delphi o desde fuera?

Chris 18-10-2011 17:55:09

Manuel, hay varios códigos de error que pueden indicar un problema con la conexión a la base de datos. Ya sea que ésta no esté disponible, porque no exista el archivo o que halla sido dañada. Un ejemplo para manejar estos casos sería:

Código Delphi [-]
try
    with IBDatabase1 do
    begin
        DatabaseName := '192.168.1.100:c:\datos\datos.gbd';
        Open;
    end;
except
    on E: EIBError do
        case E.IBErrorCode of
            336723983, // gsec_cant_open_db (Unable to open database)
            336920605: // gstat_open_err (Can't open database file)
            begin
                // el archivo de la base de datos no existe o
                // no está disponible para el servicio de Firebird.
                
                // TU CÓDIGO ACÁ
            end;
            
            335544335, // db_corrupt (Database file appears corrupt)
            335544404, // corrupt (Database corrupted)
            335544415: // badrelation (Database corrupted)
            begin
                // hay un error interno en la base de datos. Puede ser
                // que el archivo .gdb o .fdb esté dañado.
                
                // TU CÓDIGO ACÁ
            end;
        end;
end;

Saludos,
Chris

Manuel 18-10-2011 20:18:56

Gracias Chriss

Código Delphi [-]
on E: EIBError do
        case E.IBErrorCode of

Me informa un error, habrá que colocar algo en los uses?

Casimiro Notevi 18-10-2011 20:24:23

Cita:

Empezado por Manuel (Mensaje 416049)
Me informa un error

¿Quieres que adivinemos el error? ;)

Manuel 18-10-2011 20:43:25

Disculpa Casimiro, pero de repente me dan unos arranque de humanidad y se me olvidan las cosas:

este es el error Undeclared identifier: 'EIBError', un error de compilación

Chris 18-10-2011 21:30:23

Cita:

Empezado por Manuel (Mensaje 416049)
Gracias Chriss

Me informa un error, habrá que colocar algo en los uses?

Tienes que agregar la unidad IB a tu sección de uses.

Saludos!

maeyanes 18-10-2011 21:35:35

Hola...

Manuel, espero que no estés usando "copy-paste" crudo del código que te están proporcionando. Investiga un poco antes de usar el código, por que a veces hay que hacer modificaciones para que te sea útil. En tu caso, lo más seguro es que o te hace falta agregar una unidad a la cláusula uses de tu código o el tipo EIBError se llame diferente.


Saludos...


La franja horaria es GMT +2. Ahora son las 20:17:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi