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)
-   -   Mensaje clave repetida (https://www.clubdelphi.com/foros/showthread.php?t=26632)

Luis Castillo 28-10-2005 16:42:24

Mensaje clave repetida
 
Que tal mis amigos.....


Tengo un pequeño problema que creo que no les costara trabajo responderme.

EStoy trabajando en una base de datos en Paradox y ya sabemos lo que pasa cuando insertamos la llave primaria repetida: 'KEY VIOLATION' o cuando dejamos de insertar un campo declarado como repetido.

El caso es que deseo poner mi mensaje y dependiendo de la tabla.

Yo consulte el siguente codigo para el evento OnPostError:

Código Delphi [-]
 procedure TDM.TTrabajadorPostError(DataSet: TDataSet; E: EDatabaseError;
 var Action: TDataAction);
 begin
   if (E is EDBEngineError) then
   Begin
     case (E as EDBEngineError).Errors[0].Errorcode of
       DBIERR_REQDERR: ShowMessage('Hace falta un valor necesario');
       DBIERR_KEYVIOL: ShowMessage('clave repetida para tabla...');
     Else
       Exit
     end;{case}
     action := daAbort;
   End;{if}
 end;
Pero no me esta funcionando porque me sale el mismo mensaje en ingles.

Que puede estar pasando?

lucasarts_18 28-10-2005 18:20:38

Tienes que desactivar la opción Stop on Delphi Exceptions.

Esto lo ves en el menú Tools ->Debugger Options ->Pestaña Language exceptions.

Espero que sea eso...

Hasta Luego -

ContraVeneno 28-10-2005 18:34:22

Código Delphi [-]
try 
 ExecSQL; //Instrucción insert 
{Tambien podría ser E:EDBEngineError 
dependiendo del rango de errores que se quieran capturar} 
except on E:Exception do 
 if (E is EDBEngineError) then 
  with EDBEngineError(E).Errors[0] do 
   if ErrorCode = 9729 then 
    MessageBox(frmInicial.Handle,'Llave Luplicada.','Error',MB_ICONERROR);
end; //Fin try
capturar errores
llave duplicada

Lepe 29-10-2005 07:56:04

A tener en cuenta es que si el campo persistente en delphi tiene el valor de Required := True, el error será un EDatabaseError, y no será manejada la excepción por ese bloque.

Quita el Required en delphi para que entre en ese manejador.


Teniendo en cuenta que eso siempre estará en el OnPostError de un TTable, puedes usar esto:
Código Delphi [-]
   DBIERR_KEYVIOL: ShowMessage('clave repetida para tabla...'+
             TTable(Dataset).TableName);
Así puedes compartir el mismo evento OnPostError para todas las tablas.

saludos


La franja horaria es GMT +2. Ahora son las 13:20:59.

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