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)
-   -   Capturar Error de conexion (https://www.clubdelphi.com/foros/showthread.php?t=92410)

Rc96 23-10-2017 16:44:55

Capturar Error de conexion
 
Hola buenos dias, espero esten bien. Queria saber si alguien sabe como capturar los errores que ocurran al conectar la base de datos. Veran al iniciar mi sistema verifica un archivo ini donde estan los parametros de conexion de la base de datos y procede a conectar pero si llegara a ocurrir un error en la coneccion como podria capturarlo y si se cumple esa condicion abrir el modulo donde configuro la conexion para la base de datos. Como base de datos uso PostgreSQL y para la coneccion FireDac.

Vi este codigo en la inter para obtener el error pero veo que es para un dataset no para el FDConnection1
Código Delphi [-]
       try
      DataSet.Post;
    except
      on E: Exception do
        ShowMessage(E.Message);
    end;

aca les dejo el codigo con el que conecto la BD al iniciar el sistema.
Código Delphi [-]
procedure Tfrmvp.FormShow(Sender: TObject);
var DriverID,DB,User,Pass,Server,Port: String;
begin
 if FileExists('ConexionBD.ini') then {Verificar si existe el .ini con la conexion}
 begin
    FDPhysPgDriverLink1.VendorLib:='libpq.dll';{Le indico la libreria de la BD}
    FDConnection1.Connected:=false;
    FDConnection1.Params.Clear;
    FDConnection1.Params.DriverID:='PG';  {escojo el drier de la BD}
    Conexion:=Tinifile.Create(ExtractFilePath(Application.ExeName)+'ConexionBD.ini'); {Extraigo los parametros del .ini}
     with Conexion do
   begin
    DB:= Conexion.ReadString('Conexion', 'DataBase', '');
    User:= Conexion.ReadString('Conexion', 'User_Name', '');
    Pass:= Conexion.ReadString('Conexion', 'Password', '');
    Server:= Conexion.ReadString('Conexion', 'Server', '');
    Port:= Conexion.ReadString('Conexion', 'Port', '');
   end;
      with Conexion do {paso los parametros al FDConnection para la conexion}
   begin
    FDConnection1.Params.Add( 'Server=' + Server  );
    FDConnection1.Params.Database:=DB;
    FDConnection1.Params.UserName:=User;
    FDConnection1.Params.Password:=Pass;
   end;
   Timer1.Enabled:=True;
   Barra_Estado;
 end
 else
 begin
   ShowMessage('BIENVENIDO');
 end;
end;
Si pueden corregir mi idea no esta de mas.
Espero puedan ayudarme. De antemano Gracias.

Soa Pelaez 23-10-2017 17:51:08

Buen día, una solución podría ser capturando el error en el evento OnError del TFDConnection

Código Delphi [-]

procedure TFDConnection.FDConnectionOnError(ASender,
  AInitiator: TObject; var AException: Exception);
var
  oExc: EFDDBEngineException;
begin
  if (AException is EFDDBEngineException) and (EFDDBEngineException(AException).Kind = ekRecordLocked) then
   AException.Message := 'Please, try the operation later. At moment, the record is busy';

  if AException is EFDDBEngineException then
  begin
    oExc := EFDDBEngineException(AException);
    if oExc.Kind = ekRecordLocked then
      oExc.Message := 'Mensaje cuando el registro está bloqueado'.
    else
    if (oExc.Kind = EkServerGone) then //and SameText(oExc[0].ObjName, 'UniqueKey_Orders') then
      oExc.Message := 'No hay Conexión a la base de datos'
    else
      oExc.Message:= 'Sucedio Otro tipo de error del lado del Servidor'  ;
  end;

end;

Rc96 23-10-2017 18:13:05

Hola Soa era lo que buscaba muchas gracias. Solo una cosa me gustaria incluir que al salir ese error se abra un modulo de mis istema donde hago la conexion. escribo un
Código Delphi [-]
FrmConfig.ShowModal;
pero me da este error
https://ibb.co/bU9SwR


La franja horaria es GMT +2. Ahora son las 04:08:15.

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