Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 15/11/2005
Rogersito Plus Rogersito Plus is offline
Miembro
 
Join Date: Oct 2005
Posts: 35
Poder: 0
Rogersito Plus Va por buen camino
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+ .
Reply With Quote
  #2  
Old 15/11/2005
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: Cantabria - España
Posts: 11,221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #3  
Old 06/12/2005
Rogersito Plus Rogersito Plus is offline
Miembro
 
Join Date: Oct 2005
Posts: 35
Poder: 0
Rogersito Plus Va por buen camino
Como lo utilizo?

Por cierto, gracias marcoszorrilla muy interesante ...
ok... ya tengo la lista de errores... ahora el detalle es que no puedo utilizarlo
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...
Reply With Quote
  #4  
Old 06/12/2005
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: Cantabria - España
Posts: 11,221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #5  
Old 21/12/2005
lroblesco lroblesco is offline
Miembro
 
Join Date: Jan 2005
Location: Baja California Sur, Mexico
Posts: 77
Poder: 22
lroblesco Va por buen camino
Unhappy 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:

Code:
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?
__________________
No siempre el mas veloz es el que gana la carrera
Reply With Quote
  #6  
Old 21/12/2005
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: Cantabria - España
Posts: 11,221
Poder: 10
marcoszorrilla Va por buen camino
Ten en cuenta que esos códigos para el BDE, los del motor de Firebird no tienen nada que ver con estos.

Un Saludo.
__________________
Guía de Estilo de los Foros
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #7  
Old 21/12/2005
lroblesco lroblesco is offline
Miembro
 
Join Date: Jan 2005
Location: Baja California Sur, Mexico
Posts: 77
Poder: 22
lroblesco Va por buen camino
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.

Code:
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.
__________________
No siempre el mas veloz es el que gana la carrera
Reply With Quote
  #8  
Old 11/07/2007
Alejandrina's Avatar
Alejandrina Alejandrina is offline
Miembro
 
Join Date: Mar 2007
Location: Medellin
Posts: 46
Poder: 0
Alejandrina Va por buen camino
Question 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... muchas gracias....
__________________
Alejandrina
Reply With Quote
  #9  
Old 12/07/2007
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: Cantabria - España
Posts: 11,221
Poder: 10
marcoszorrilla Va por buen camino
Por lo que se ve un campo que es obligatorio cumplimentar lo estas dejando en blanco.

Un Saludo.
__________________
Guía de Estilo de los Foros
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #10  
Old 12/07/2007
Alejandrina's Avatar
Alejandrina Alejandrina is offline
Miembro
 
Join Date: Mar 2007
Location: Medellin
Posts: 46
Poder: 0
Alejandrina Va por buen camino
Question Raro

Pero pk??? si el error se me esta presentando antes de permitirme seleccionar los datos a llevar para grabar!!!
__________________
Alejandrina
Reply With Quote
  #11  
Old 12/07/2007
marcoszorrilla's Avatar
marcoszorrilla marcoszorrilla is offline
Capo
 
Join Date: May 2003
Location: Cantabria - España
Posts: 11,221
Poder: 10
marcoszorrilla Va por buen camino
No tendrás un evento OnNewRecord que rellena otros campos y éste lo deja en blanco?

Un Saludo.
__________________
Guía de Estilo de los Foros
Quote:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Reply With Quote
  #12  
Old 12/07/2007
Alejandrina's Avatar
Alejandrina Alejandrina is offline
Miembro
 
Join Date: Mar 2007
Location: Medellin
Posts: 46
Poder: 0
Alejandrina Va por buen camino
Question mmm...

No no tengo este evento pero la TblPruductoSub tiene una relación maestro detalle y un campo virtual...esto tendra algo que ver?
__________________
Alejandrina
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 01:52.


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