Hola.
Yo lo que haría es capturar la excepción desde la aplicación,
con algo parecido a esto:
Código Delphi
[-]
uses IB;
...
try
...
insertquery.ExecSQL;
except
on E:Exception do
ShowMessage('Error/Excepción FireBird: '+IntToStr(EIBInterBaseError(E).IBErrorCode)+#13#10#13#10+E.Message);
end;
Una vez que sepas el codigo de error que devuelve, puedes filtrar el mensaje:
Código Delphi
[-]
uses IB;
...
try
...
insertquery.ExecSQL;
except
on E:Exception do
case EIBInterBaseError(E).IBErrorCode of
$14000019: ShowMessage('Deadlock');
$14000888: ShowMessage('El título no puede estar vacio');
end;
Lo ideal es crear un procedimiento o funcion para gestionar todos los mensajes de error de la aplicación, por ejemplo:
Código Delphi
[-]
procedure Gestion_de_Errores(E: Exception);
begin
if E is EIBInterBaseError
then begin
case EIBInterBaseError(E).IBErrorCode of
$14000019: AvisoError('Aviso', 'Coincidencia en el uso del registro.' +#13+
'Otro usuario lo tiene en uso.' +#13+
'Inténtelo de nuevo. -No es un error-'+#13+
'---------------------------------------'+#13+
'Error/Excepción FireBird: (' + E.Message + ')');
....
....
end;
end;
end;
Para luego usarla asi:
Código Delphi
[-]
try
...
insertquery.ExecSQL;
except
on E:Exception do
Gestion_de_Errores(E);
end;