Hola Jusar.
Una solución es aprovechar el evento
OnSetText del campo que no debe estar duplicado. El evento
OnSetText de la clase
TField se dispara cuando se le asigna un valor a la propiedad
Text, pero antes de que sea guardado.
Para ejemplificar voy a utilizar como nombre de tabla CLIENTES y como nombre del campo CLIENTE_ID:
Código:
void __fastcall TForm1::IBDataSet1CLIENTE_IDSetText(TField *Sender,
const AnsiString Text)
{
TuQuery->Close();
TuQuery->SQL->Clear();
TuQuery->SQL->Add("SELECT * FROM CLIENTES ");
TuQuery->SQL->Add("WHERE CLIENTE_ID = :VALOR");
TuQuery->ParamByName("VALOR")->AsString = Text;
TuQuery->Open();
if (!TuQuery->IsEmpty()) {
MessageBox(Handle,"El dato que desea ingresar ya existe",
"ERROR", MB_ICONERROR);
Abort();
}
IBQuery->Close();
}
El evento lo podés asignar desde el Field Editor, si has creado los campos persistentes o manualmente de este modo por ejemplo:
Código:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DataSet->FieldByName("CLIENTE_ID")->OnSetText = DataSetCLIENTE_IDSetText;
}
Logicamente debes agregar un componente query para realizar la consulta.
Saludos.