Hola neftali y Lepe.
Antes que todo muchas gracias de seguro que ambas funcionan.
El problema es que no domino el tema bien pero con la orientacion de ustedes uno se acerca y parende, me demore en dar con la forma apropiada para el codigo.
A la alternativa de Neftali es facil hacerle seguimiento, y comprenderla...la E.ClassName es...... "EFIBInterBaseError"
y con la instruccion.. Showmessage(inttostr(E.SQLCode));,
pude saber cual es el codigo.
PERO..... para la violacion de la clave Primaria y para la violacion de la unicidad del Nombre del cliente, me genera el mismo error. "-803"
En cambio para la violacion del check de "CUPO<=0", si me da Error "'297".
El codigo al final queda de esta forma:
Código Delphi
[-]
except
on E:EFIBInterBaseError do
begin
datamodule1.Database2.Rollback;
if (E.SQLCode =-803) then
showmessage('Intenta crear un codigo de usuario que ya existe ')
else
if (E.SQLCode =-297) then
showmessage('El cupo asignado debe ser un valor mayor que cero');
end;
end;
La alternativa de Lepe es mas avanzada, no la comprendí (ando a un nivel bajo aun) y no se que Unidad soporta el literal: strDebug.
Bueno en todo caso AUN SIGO SIN PODER IDENTIFICAR ENTRE LOS DOS PRIMEROS ERRORES... En el librode firebird dice:
Error -297 : Operation violates CHECK Constraint
Error -803 : Violation of PRIMARY or UNIQUE KEY Constraint
Pero ya comprendo que cuando se produce el mensaje de error el dice que clase es y la traduccion del Codigo como parece lineas arriba, ademas ese mensaje me dice en que constrain ocurre (es decir conociendo la REstriccion, se que campo afecta) pero no se como obtener la restriccion.
Para ampliar mas,
Cuando se produce el Error -803 ademas del mensaje "Operation violates ....." me aparece que ocurre en PK_Clientes, (ese es el nombre del constrain para la clave primaria).
Mi pregunta ahora es....... Como obtengo el nombre de la Constraint.?