Otra opcion que he probado es:
Código Delphi
[-]
procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
Application.OnException := ManejoExcepciones;
end;
procedure TfrmPrincipal.ManejoExcepciones(Sender: TObject; e:Exception);
var
Mensaje, Contexto: string;
int_ref, transac: string;
begin
int_ref := 'pg_indel: ERROR: Cannot insert a duplicate key into unique';
transac := 'pgTrans: pqReadData() -- read()';
if e.ClassType = EDataBaseError then
begin
if SameText(Copy(e.Message,1,Length(int_ref)),int_ref) then
begin
MessageDlg('El registro que desea insertar ya se encuentra asignado.', mtWarning, [mbOK], 0);
exit;
end;
if SameText(Copy(e.Message,1,Length(transac)),transac) then
begin
MessageDlg('Se ha perdido la conexión con el servidor de base de datos!'
+chr(13)+'Finalizando la aplicación...', mtWarning, [mbOK], 0);
Application.Terminate;
end;
MessageDlg('El servidor de Base de Datos ha reportado un error.'
+chr(13)+'Mensaje del error:'+chr(13)+ e.Message, mtWarning, [mbOK], 0);
exit;
end;
if e.ClassType = EConvertError then
begin
Application.MessageBox('Error de conversión de datos.'+chr(13)+
'Este error podría deberse a que ingresó datos que no corresponden al formato'+
' en que debería ser ingresados. Verifiquelos y vuelva a cargar.', 'Conversión de Datos',
MB_ICONEXCLAMATION + MB_OK);
exit;
end;
if e.ClassType = EAccessViolation then
begin
Application.MessageBox('Violación de acceso en memoria!', 'Violación de Acceso', MB_ICONEXCLAMATION + MB_OK);
exit;
end;
if e.ClassType = EVariantError then
begin
MessageDlg('Error de conversión de tipo de datos.', mtWarning, [mbOK], 0);
exit;
end;
Mensaje := e.Message;
Contexto := IntToStr(e.HelpContext);
MessageDlg('Error del Sistema.'+
chr(13) +
'Mensaje del error: ' +
chr(13) +
e.Message +
chr(13) +
'Contexto: ' +
chr(13) +
Contexto,
mtError, [mbOK], 0);
end;
No pude cambiar el mensaje de error.