Hola.
Pues como te comenta Roman, y suponiendo que uses Firebird y los componentes FibPlus, en el evento OnpostError puedes colocar un procedimiento (o sin procedimiento) tal como:
Código Delphi
[-]
procedure TdmDatos.InformaError(E:EDatabaseError);
begin
Case EIBError(E).IBErrorCode of
isc_unique_key_violation:
begin
MessageDlg(E.Message +
'CLAVE DUPLICADA',mteRROR,[mbOk], 0);
end
else
begin
showmessage(inttostr(EIBError(E).IBErrorCode));
end;
end;
end;
isc_unique_key_violation es una constante con el codigo de error que te devuelve el servidor correspondiente a la clve duplicada. Si quieres controlar otros codigos de error, en IbErrorCodes.pas tienes el (creo recordar..).
No olvides añadir a las uses : Ib,IbErrorCodes.
Saludos