PDA

Ver la Versión Completa : Evitar Datos Repetidos??


Bare
10-06-2010, 02:50:16
Hola a todos, ahora me tope con este problema...:(
Necesito saber como hacerle para que el programa verifique que no exista un registro igual en la base de datos, como puedo hacerlo?
Dejen les pongo la idea que tenia, el codigo no esta correcto:



parametro1=ComboBox1->Text; //ANIO
parametro2=ComboBox2->Text; //LOCALIDAD
parametro3=ComboBox3->Text; //EVALUACION


ADOQuery->SQL->Text = "select * from Tabla_Prueba where [Año] = '"+parametro1+"' AND Localidad = '"+parametro2+"' AND Evaluacion = '"+parametro3+"' ";


if( ADOQuery->SQL->Text == NULL ) {
//AGREGAR DATOS

else
SHOWMESSAGE("EL REGISTRO YA EXISTE");
}


Como pueden ver en el codigo,la idea es buscar un registro que coincida con Año, Localidad y Evaluacion, de ser asi, el registro ya esta y no puede agregarse de nuevo...
Alguna sugerencia?..Espero haberme dado a entender..:)

Casimiro Notevi
10-06-2010, 02:51:39
Sí, la idea es correcta :)

Mira este (http://www.clubdelphi.com/foros/showthread.php?t=68352) tema que ha sido tratado hoy, puede servirte.

Bare
10-06-2010, 04:09:14
Que tal amigo, ya cheque el tema y me dejo pensando sobre lo de la llave primaria, pero el problema es que para saber si el registro existe, tienen que coincidir los 3 campos (AÑO,LOCALIDAD,EVALUACION),asi que no puedo usar lo del campo llave.
Pense en quizas hacer la consulta y mostrar los datos en un DBGrid, y despues verificaar si el grid esta activo y de esta manera saber si hay datos o no, peor no se si se pueda hacer esto...:confused::confused:

Casimiro Notevi
10-06-2010, 11:57:03
Las claves pueden ser de más de un campo, puedes hacerlo igualmente.

Bare
11-06-2010, 03:35:43
Que tal, hice los de las claves llave (yo pense que no se podia, jamas lo habia intentado) y funciono...:):)
Pero me quedo una duda, porque si le agregas un dato y lo quieres volver a agregar te da el error de que no se puede duplicar, el problema aqui es que si le cambio algun valor en los combobox y le doy en agregar, no me deja, me sigue marcando el mismo error, y se supone que deberia dejarme, para que me deje tengo que cerrar la aplicacion y volver a abrirla.
No hay algun metodo para que no tenga que reiniciar la aplicacion?, intente con el Form->Refresh y nada....:(

Saludos

Casimiro Notevi
11-06-2010, 18:07:42
Evidentemente, si no vemos tu código, poco podemos hacer ;)

Bare
11-06-2010, 18:55:17
jejejejejeje, obvio, jejejeje..:D
aqui esta el codigo:



Tabla->Open();
Tabla->Insert();

//--------------------------------------------------
Tabla->FieldByName("Casos_sospechosos_colera_est")->AsString = Edit1->Text;
Tabla->FieldByName("casos_diarrea_notif_SUIVE")->AsString = Edit2->Text;
Tabla->FieldByName("casos_sospechosos_coleratrat")->AsString = Edit7->Text;
Tabla->FieldByName("Total_casos_colera")->AsString = Edit8->Text;
Tabla->FieldByName("cepas_positivasvibrio")->AsString = Edit18->Text;
Tabla->FieldByName("Total_muestrasproc")->AsString = Edit19->Text;
Tabla->FieldByName("Deter_cloro")->AsString = Edit26->Text;
Tabla->FieldByName("Total_detercloro")->AsString = Edit27->Text;

//------------------------------------------------------
Tabla->FieldByName("ID_coberturadeteccion")->AsString = Edit3->Text;
Tabla->FieldByName("ID_tratoportuno")->AsString = Edit9->Text;
Tabla->FieldByName("ID_eficiencialab")->AsString = Edit20->Text;
Tabla->FieldByName("ID_cloracionagua")->AsString = Edit28->Text;
//------------------------------------------------------
Tabla->FieldByName("P_coberturadeteccion")->AsString = Edit14->Text;
Tabla->FieldByName("P_tratoportuno")->AsString = Edit15->Text;
Tabla->FieldByName("P_eficiencialab")->AsString = Edit21->Text;
Tabla->FieldByName("P_cloracionagua")->AsString = Edit29->Text;

Tabla->FieldByName("Año")->AsString = ComboBox1->Text;
Tabla->FieldByName("Localidad")->AsString = ComboBox2->Text;
Tabla->FieldByName("Evaluacion")->AsString = ComboBox3->Text;




Tabla->Post();
Application->MessageBox ("Datos Grabados en la BD","Aviso", MB_OK);

//Form1->Refresh();//---ESTO FUE LO QUE INTENTE PERO NADA..:confused:

Casimiro Notevi
11-06-2010, 19:54:02
No sé qué componentes o con qué estás trabajando, pero creo que necesitas un commit de la transaction.

Bare
12-06-2010, 00:17:31
Estoy trabajando con componentes ADO, me conecto con el ADOConection, enlazo las tablas con ADOTable y DataSource.

Casimiro Notevi
12-06-2010, 00:19:43
Pues, lo dicho, seguramente necesitas hacer commit

Bare
12-06-2010, 00:25:43
Y eso como se hace?, es dificil? me podrias explicar o darme un ejemplo??--:confused:

Casimiro Notevi
12-06-2010, 00:31:46
Yo no uso ADO, pero haz una búsqueda en clubdelphi con esos parámetros, se ha tratado varias ocasiones. Buscar por ADO* transaction

Bare
12-06-2010, 02:36:39
Gracias por la info, encontre algunos posts aqui y mas info gogleando.
Muchas Gracias por todo..:D