Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-11-2005
Rogersito Plus Rogersito Plus is offline
Miembro
 
Registrado: 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+ .
Responder Con Cita
  #2  
Antiguo 15-11-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: 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
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 06-12-2005
Rogersito Plus Rogersito Plus is offline
Miembro
 
Registrado: 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...
Responder Con Cita
  #4  
Antiguo 06-12-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: 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
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 21-12-2005
lroblesco lroblesco is offline
Miembro
 
Registrado: ene 2005
Ubicación: Baja California Sur, Mexico
Posts: 77
Poder: 20
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:

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?
__________________
No siempre el mas veloz es el que gana la carrera
Responder Con Cita
  #6  
Antiguo 21-12-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: 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
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 21-12-2005
lroblesco lroblesco is offline
Miembro
 
Registrado: ene 2005
Ubicación: Baja California Sur, Mexico
Posts: 77
Poder: 20
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.

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.
__________________
No siempre el mas veloz es el que gana la carrera
Responder Con Cita
  #8  
Antiguo 11-07-2007
Avatar de Alejandrina
Alejandrina Alejandrina is offline
Miembro
 
Registrado: mar 2007
Ubicación: 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
Responder Con Cita
  #9  
Antiguo 12-07-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: 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
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #10  
Antiguo 12-07-2007
Avatar de Alejandrina
Alejandrina Alejandrina is offline
Miembro
 
Registrado: mar 2007
Ubicación: 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
Responder Con Cita
  #11  
Antiguo 12-07-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: 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
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #12  
Antiguo 12-07-2007
Avatar de Alejandrina
Alejandrina Alejandrina is offline
Miembro
 
Registrado: mar 2007
Ubicación: 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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 07:38:11.


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