Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   EDataBaseError... (https://www.clubdelphi.com/foros/showthread.php?t=27214)

Rogersito Plus 15-11-2005 14:58:11

EDataBaseError...
 
Hola Foristas D' Delphi... ;) .

Donde puedo encontrar los codigos de error de DataBase(EDataBaseError) y como controlarlos...? ya que de INTEBASE/FIREBIRD si pude estan enla unit IB y IBErrorCodes... gracias por responder...

Saludos D' RgR+ :D .

marcoszorrilla 15-11-2005 15:18:25

Si te refieres a los errores del BDE.
Código Delphi [-]
 La lista de errores del BDE, la podemos obtener investigando un poco en el fichero  bde.int 
   Ahí veremos que los códigos de error se componen de un valor 'base' y de un offset. 
 
   Aqui tienes un invento para generar tu listado de errores del BDE: 
 
    Incluye 'dbiprocs' en el uses de tu form 
    Pon un TRichEdit (RE1) 
    Y pon esto en el OnClick de un TButton: 
 
          procedure TForm1.Button1Click(Sender: TObject);
          const
            Bases:array [1..24] of integer=(
              0,$2100,$2200,$2300,$2400,$2500,$2600,$2700,$2800,
              $2900,$2A00,$2B00,$2C00,$2D00,$2E00,$2F00,$3000,
              $3100,$3200,$3300,$3400,$3500,$3E00,$3F00);
          var
             ErrorCod:integer;
             ErrorTexto:array [0..DBIMAXMSGLEN+1] of char;
             i,n:integer;
          begin
            for i:=1 to 24 do
              for n:=0 to 255 do
              begin
                ErrorCod:=Bases[i]+n;
                DbiGetErrorString(ErrorCod,ErrorTexto);
                If ErrorTexto<>'' then
                  Re1.Lines.Add('$'+IntToHex(ErrorCod,4)+' ('+
                                IntToStr(ErrorCod)+') = '+ErrorTexto);
                Application.ProcessMessages;
              end;
          end;

No recuerdo de donde lo saqué..

Un Saludo.

Rogersito Plus 06-12-2005 02:41:19

Como lo utilizo?
 
Por cierto, gracias marcoszorrilla muy interesante :p ...
ok... ya tengo la lista de errores... ahora el detalle es que no puedo utilizarlo :o
es que soy novato en esto...

Ejemplo: en tengo la tabla BENEFICIARIOS con la columna RAZON y es NOT NULL y pues cuando hago un POST para la tabla, aparece el error:

Field 'RAZON' must have a value

entonces segun la lista errores deberia controlar el error :

$2604(9732) = Field Value Required

¿como lo controlo? a que el mensaje de error sea mas amigable...
GRACIAS POR SUS AYUDAS...

marcoszorrilla 06-12-2005 10:15:33

Básate en este ejemplo tomado de parte de mi código:
Código Delphi [-]

  Const
    eKeyViol = 9729;
    eRequiredFieldMissing = 9732;
    eForeignKey = 9733;
    eDetailsExist = 9734;
    eSqlGralerror = 13059;
  
  implementation
  uses Global;
  
  {$R *.DFM}
  Procedure midberror(DataSet: TDataSet; E: EDatabaseError);
  
  begin
  if (E is EDBEngineError) then
    if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
    begin
    Application.MessageBox('Imposible dar alta ese registro ya existe','Atención',mb_Ok +   mb_IconQuestion);
    Abort;
    end;
  
    if (E as EDBEngineError).Errors[0].Errorcode = eRequiredFieldMissing then
    begin
      Application.MessageBox('Imposible dar alta hay un campo vacio.','Atención',mb_Ok +
    mb_IconQuestion);
      Abort;
    end;
  
        //campo en blanco
  
    if (E as EDBEngineError).Errors[0].Errorcode =   eSqlGralerror then
    begin
    Application.MessageBox('Imposible dar alta hay un campo requerido vacío.','Atención',mb_Ok +
    mb_IconQuestion);
    Abort;
    end;
  
  
  end;
  
 
   procedure TDmVil.ProvPostError(DataSet: TDataSet; E: EDatabaseError;
     var Action: TDataAction);
   begin
   midberror(Prov,e);
   end;

Un Saludo.

lroblesco 21-12-2005 07:48:30

Continuando con esto
 
Hola a todos:

Probe el codigo de Marcos, y no se que es lo que estare haciendo mal . Una explicadita para esto uso los componentes MDO RC1, uso Firebird 1.5 y Delphi 7. En el evento OnPostError pongo el codigo anterior y al parecer no entra en esta parte:

Código:

if (E is EDBEngineError) then
 if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then

se lo salta y me sale el error de clave repetida.
cuando usaba los componentes de ADO preguntaba por el error nativo del componente ADOConnection, mas no se si se pueda en estos componentes.
El numero de error nativo creo que es el -803 para keyViolatoin en Firebird

Como hago para que no salga mas el error y poder hacer algo para personalizar mas los mensajes de error?

marcoszorrilla 21-12-2005 12:10:28

Ten en cuenta que esos códigos para el BDE, los del motor de Firebird no tienen nada que ver con estos.

Un Saludo.

lroblesco 21-12-2005 19:34:15

Firebird y capturando Excepciones
 
Tienes toda la razon Marcos, me imagine que se podian usar ya que los Tables de los MDO herendan caracteristicas de los TTable del BDE.

Mi pregunta es como capturo la exception lanzada por el servidor Firebird, sin usar el try ...except en el evento OnPostError, y en base al error que sea pues actuar con la rutina correspondiente.

Puse este codigo y tampoco parece ser que entre, ya que parece ser E no es un EDBEngineError.

Código:

procedure TMDIChildException.TClientesOnPostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
if E is EDBEngineError then
if (E as EDBEngineError).Errors[1].NativeError = -803 then
begin
MessageDlg( 'You cannot delete an order that has already shipped',
mtError, [mbOK], 0);
action := daAbort;
end;
end;

Bueno espero me puedan echar la mano con esto, que ya tengo algo de tiempo
y quisiera saber si esto es posible.
Gracias de antemano.

Alejandrina 11-07-2007 22:37:24

Error EDataBaseError
 
Hola a todos,
No estoy segura si este es el lugar adecuado pero bueno.
Lo que pasa es k ejecuto mi aplicacion y me sale el siguiente error:
Project XX.exe raised exception class EDatabaseError with message 'Field 'REFERENCIA_SUB' must have a value'. Process stopped. Use Step or Run to continue.

La verdad no se k kiere decir este error, no tengo ni idea de k revisar...
a kien me pueda iluminar...:confused: muchas gracias....

marcoszorrilla 12-07-2007 07:00:43

Por lo que se ve un campo que es obligatorio cumplimentar lo estas dejando en blanco.

Un Saludo.

Alejandrina 12-07-2007 15:18:58

Raro
 
Pero pk??? si el error se me esta presentando antes de permitirme seleccionar los datos a llevar para grabar!!!:confused:

marcoszorrilla 12-07-2007 15:31:23

No tendrás un evento OnNewRecord que rellena otros campos y éste lo deja en blanco?

Un Saludo.

Alejandrina 12-07-2007 16:08:18

mmm...
 
No no tengo este evento pero la TblPruductoSub tiene una relación maestro detalle y un campo virtual...esto tendra algo que ver?:confused:


La franja horaria es GMT +2. Ahora son las 17:54:41.

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