Hola José.
No sé como estas capturando las excepciones te pongo un ejemplo muy, pero muy simplificado para que pruebes:
Código Delphi
[-]
...
type
TfrmMain = class(TForm)
...
procedure FormCreate(Sender: TObject);
...
private
...
public
...
end;
TwPaciente = class(TObject)
public
procedure ShowException(Sender: TObject; E: Exception);
end;
var
frmMain: TfrmMain;
wPaciente : TwPaciente;
implementation
procedure TwPaciente.ShowException(Sender: TObject; E: Exception);
var
Msg: string;
begin
case EIBInterbaseError(E).IBErrorCode of
335544347: Msg := 'El campo NOMBRE no puede estar vacio';
end;
MessageDlgPos(Msg,mtError,[mbOk], 0, 100, 200);
frmMain.IBTransaction1.RollbackRetaining;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
Application.OnException := wPaciente.ShowException;
end;
...
De este modo tiene que funcionarte sin presentar la segunda pantalla. Pero debo decirte que en la práctica, queda por tu cuenta manejar cada una de las excepciones que pudiera presentar cualquier tabla de tu bd.
Fijate que estoy utilizando IBX por lo que deberás cambiar:
Código Delphi
[-]EIBInterbaseError(E).IBErrorCode
por:
Saludos
Edito: Si te decidis por este modo de manejo, te aconsejo crearte una unidad para encapsular todo el código relativo al manejo de las excepciones.