Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-04-2007
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
Capturar error de Conexión con las IB

Hola amigos del Club, estoy dejando atras las ttable (cambiando por la pestaña Interbase (IB, Creo) en delphi 5) para conectarme a una base de datos INTERBASE que además estoy migrando a FIREBIRD 2.0, el tema es el siguiente tengo una base de datos que la conecto con el objeto TIBEDataBase, todo bien uso query IB, todo bien le paso el nombre y la ruta de la base de datos física de esta manera:

Código Delphi [-]
procedure TDm.IBDatosBeforeConnect(Sender: TObject);
begin
     IBDatos.DatabaseName := 'E:\bddsistemas\DatosSanignacio\colacion.GDB';
end;

Ahora, en una aplicación más sofiticada esa ruta debería estar en un archivo configuración, como .ini que se yo, por defenir, mi pregunta concreta es que pasa si esa ruta no corresponde a la realidad, la aplicación me reportaría un error, mas seguiría con la ejecución, como podría capturar el error?, generar mi propio mensaje y terminar la aplicación. Algo trate con try .. except, pero no logro saber donde lo puedo colocar. Agradesco desde ya su ayuda.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #2  
Antiguo 18-04-2007
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
pues se colocaria donde intentes conectar, puede ser por ejemplo en un splash window al iniciar la aplicacion, puede ser al crearse el form principal, etc
Responder Con Cita
  #3  
Antiguo 20-04-2007
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
Cita:
Empezado por Manuel
Hola amigos del Club, estoy dejando atras las ttable (cambiando por la pestaña Interbase (IB, Creo) en delphi 5) para conectarme a una base de datos INTERBASE que además estoy migrando a FIREBIRD 2.0, el tema es el siguiente tengo una base de datos que la conecto con el objeto TIBEDataBase, todo bien uso query IB, todo bien le paso el nombre y la ruta de la base de datos física de esta manera:

Código Delphi [-]
procedure TDm.IBDatosBeforeConnect(Sender: TObject);
begin
     IBDatos.DatabaseName := 'E:\bddsistemas\DatosSanignacio\colacion.GDB';
end;

Ahora, en una aplicación más sofiticada esa ruta debería estar en un archivo configuración, como .ini que se yo, por defenir, mi pregunta concreta es que pasa si esa ruta no corresponde a la realidad, la aplicación me reportaría un error, mas seguiría con la ejecución, como podría capturar el error?, generar mi propio mensaje y terminar la aplicación. Algo trate con try .. except, pero no logro saber donde lo puedo colocar. Agradesco desde ya su ayuda.
Parece que plantee mal mi pregunta pero ahí va de nuevo:

Mi idea es, como capturo el error por una conexión fallida, algo como esto, que me funciona muy bien:

Código Delphi [-]
procedure TDm.IBDatosBeforeConnect(Sender: TObject);
var
  sPath: string;
begin
   sPath := 'E:\bddsistemas\DatosSanignacio\colacion.GDB';
   if not FileExists(sPath) then
      begin
        ShowMessage('No se encuentra la base de datos '+sPath+' por lo tanto finalizará la sesión');
        Application.Terminate;
        exit;
      end;  
     IBDatos.DatabaseName := sPath;

end;

ahora que pasa si la base de datos colacion.GDB, esta corrompida o simplemente no es un base de datos interbase?, mi pregunta es como capturo ese error, por que en estos momentos solo capturo el error si el archivo colacion.gdb no se encuentra en el directorio especificado. Gracias.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Responder Con Cita
  #4  
Antiguo 20-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Antes de nada definimos nuestros tipos de Excepciones.

Después solo tenemos que crearlas y lanzarlas cuando más nos apetezcaa con
raise NOMbreExcepcion.Create(mensaje a mostrar)

Por último en un TApplictionEvents, en su evento OnException, averiguamos que tipo de excepción es y actuamos en consecuencia, grabando un archivo .txt la clase de excepción y la descripción.

Código Delphi [-]
type EShowException = class Exception;
       EFatalException = class Exception;
       EHiddenException = Class Exception;

procedure TDm.IBDatosBeforeConnect(Sender: TObject);
var
  sPath: string;
begin
   sPath := 'E:\bddsistemas\DatosSanignacio\colacion.GDB';
   if not FileExists(sPath) then
      begin
raise EFatalException.Create ('No se encuentra la base de datos '+sPath+' por lo tanto finalizará la sesión');
      end;  
     IBDatos.DatabaseName := sPath;
end;


procedure TFormPrincipal.ApplicationEventsOnException(....E:Exception);
begin
  GrabarAArchivoLog(E.ClassName, E.Message);
  if E is EFatalException then
  begin
    ShowMessage E.message);
    Application.Terminate;
  end
  else if E is EShowException then
   ShowMessage(E.Message);
  else if E is EHideException then
  // juas no hacemos nada y no la mostramos al usuario, 
//solo la grabamos en el archivo de texto
end;

El tema de EHideException es muy subjetivo, yo lo uso con aquellos fallos tontos y que suelo controlar como '' is not a valid integer, la fecha introducida no es válida, etc. En esos casos suelo mostrar un mensaje al usuario dándole ayuda en español, pero aparte, suelo lanzar la excepción para:
- Que se corte el flujo normal del programa y no ejecute código con una fecha inválida
- Que se guarde la excepción en el archivo de texto, para cuando vaya a modificar algo, ver los tipos de errores que suele cometer el usuario.

En delphi 6, cuando se lanza una excepción siempre se muestra al usuario, aunque tengamos un TApplicationEvents.

En BDS 2006, cuando se lanza una excepción y existe el TApplicationEvents.OnException, la excepción no se muestra al usuario final, por ello, he puesto ShowMessages dentro de dicho manejador.

La forma de mostrar la excepción al usuario, ya es estilo propio, ShowMessage, MessageBox, etc.;

Edito:

Los try ... except se deberían poner donde quiera que pueda producirse un error, pero claro, son muchos puntos en una aplicación mediana, por tanto, puedes controlar algunos directo en el código, y el resto en el ApplicationEvents.OnException.

El flujo normal de excepciones es:
- Se produce una excepción, si está entre un try ... except:
Se salta directamente a ese except y se ejecutan las líneas que haya, después se continúa en al final del except....end.
Si dentro del except..ende hay una instrucción raise;, la misma excepción que ha saltado, se vuelve a lanzar, si hay un ApplicationEvents, llegará hasta él.
- Se produce una excepción, no hay ni try...except ni tampoco un ApplicationEvents:
Se corta el flujo del programa en esa línea de código y se muestra al usuario el mensaje de la excepción.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 20-04-2007 a las 19:41:25.
Responder Con Cita
  #5  
Antiguo 20-04-2007
Avatar de LordRiper
LordRiper LordRiper is offline
Miembro
 
Registrado: mar 2007
Posts: 22
Poder: 0
LordRiper Va por buen camino
Prueba con esto:

Código Delphi [-]
try
  DB.Connected:=True;
except
  On E:Exception do
  begin
    Mensaje('Error al conectar con la Base de Datos, error regresado por el servidor: '+E.Message);
  end;
end;
__________________
-- Salim Giacoman --
Torreon, Coahuila, Mx
giacoman_salim@hotmail.com


“Entre más aprendo, más quiero saber.
Entre más sé, más quiero aprender"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
capturar error de conexion - ClientSocket Panchisco C++ Builder 1 10-07-2006 22:11:05
capturar error gulder Conexión con bases de datos 1 09-06-2006 18:51:20
capturar nro error Ricardo Alfredo MS SQL Server 3 22-05-2006 17:52:55
Capturar error silviodp Conexión con bases de datos 3 01-07-2005 11:59:36
Capturar error bbjb OOP 3 12-04-2005 19:19:46


La franja horaria es GMT +2. Ahora son las 03:37:42.


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
Copyright 1996-2007 Club Delphi