Ver Mensaje Individual
  #5  
Antiguo 11-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita