Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Mensaje de error cuando hay datos duplicados en la base (https://www.clubdelphi.com/foros/showthread.php?t=78708)

Jusar 10-05-2012 20:58:06

Mensaje de error cuando hay datos duplicados en la base
 
1 Archivos Adjunto(s)
Gente actualmente me encuentro conectano una base de datos con mysql y builder 6, para agregar los datos utilizo un navigator pero no se como evitar el error de cuando se duplican entonces quiero saber como hago para comprobar si ya existe el cliente o el dato utilizando el navigator

Jusar 10-05-2012 20:59:35

1 Archivos Adjunto(s)
Adjunto esta otra imagen... para q vean los mensajes q me dan...

Casimiro Notevi 10-05-2012 22:14:39

Depende de como hayas hecho el sistema de entrada de datos, lo normal es un formulario donde pides por ejemplo el dato "clave", "código", etc. entonces compruebas si existe. En caso positivo, muestras los datos que ya existen o sacas un mensaje diciendo que existe y que teclee otro, etc. a tu gusto.
La verdad es que tu pregunta no está muy clara, es muy amplia y puede contestarse muchas cosas, debes ser más específicos, dar más información, ya sabes: a mejores preguntas... mejores respuestas ;)

Jusar 10-05-2012 23:18:52

En realidad es un sowfware tipo registro en donde agrego cedula q es llave nombre una direccion y una fecha de nacimienton, utilizo una herramienta llamada dbnavigator para hacer la insercion a la base de datos en este caso utilizando MYSQL y entonces quiero evitar el error de
agregar datos duplicados en la base....

ecfisa 11-05-2012 18:44:12

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.


La franja horaria es GMT +2. Ahora son las 11:58:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi