PDA

Ver la Versión Completa : Detectar conexion Firebird


brandolin
17-12-2005, 19:13:35
Hola foristas, estoy trabajando con DBExpres + Firebird 1.5 + D7 y lo que quiero hacer es una aplicacion que tiene dos bases de datos una local y otra remota (por lan o wan) y quiero poder controlar la existencia de la BD remota para eso cuando intento conectarme y pasa un determinado tiempo y no logro la conexion mando un aviso al operador. El problema es que no puedo manejar la excepcion de que no se conecta al servidor. Uso el siguiente codigo:

procedure TdmCentral.SQLConnRemBeforeConnect(Sender: TObject);
begin
try
vLocNombreINI := lowercase(Format('%s%s.ini', [ExtractFilePath( Application.ExeName ), _NombreSoftPosXamba]));
with SQLConnRem do
begin
Params.Values['Database'] := LeerINI( vLocNombreINI, 'Base de Datos', 'Nombre Remota', lowercase(ExtractFilePath( Application.ExeName )+'NodosDB1.fdb'));
Params.Values['User_Name'] := LeerINI(vLocNombreINI, 'Base de Datos', 'Usuario', 'sysdba');
Params.Values['Password'] := LeerINI(vLocNombreINI, 'Base de Datos', 'Password', 'masterkey');
end;
except
On E: Exception Do If (E Is EIBInterBaseError) Then
begin
ShowMessage(E.Message);
vConectada := False;
End Else
ShowMessage('Error desconocido');
end;
end;


Lo que no logro que se execute es el except siempre salta un cartel de que el archivo no existe y alli muere todo. ¿Alguna ayudita? Gracias

jachguate
19-12-2005, 18:12:07
Hace poco he tenido una experiencia con DBExpress y francamente me parece (puedo estar confundido) que su "variedad" de excepciones es realmente pobre: EDatabaseError.

Así, tu código jamás entrará al IF, pues la excepción que se eleva no es (ni por chiste) es un EIBInterbaseError.

Me veré obligado a profundizar un poco en el tema, pero por ahora, tengo la impresión que DBX apesta (al menos en este aspecto), pues no hay forma de saber el número de error nativo o algún código que nos oriente sobre cual fue el error que ocurrió cuando se tira contra un servidor SQL, lo que nos deja en la incomoda situación de procesar los mensajes de error y cruzar los dedos para que dichos mensajes nunca cambien en el motor (lo cual francamente es terriblemente improbable)

Hasta luego.

;)