Programación General > C++ Builder
Duda con ADOQuery?
el bare:
Que tal amigos, me tope con un problema al ingresar datos en mi sistema, bueno, se ingresan bien, el detallle es que quiero evitar que se repitan datos en mi programa.
pense en hacer algo como esto para solucionarlo:
--- Código: C++ --- AnsiString parametro1,parametro2,parametro3; parametro1=ComboBox1->Text; //ANIOparametro2=ComboBox2->Text; //LOCALIDADparametro3=ComboBox3->Text; //TRIMESTRE ADOQuery1->SQL->Text = "SELECT * FROM Tabla_Prueba WHERE Año = "+parametro1+",Localidad = "+parametro2+" AND Evaluacion = "+parametro3+" "; if(ADOQuery1==TRUE){ ShowMessage("DATOS YA EXISTENTES");}
Pero no funciona, no se como hacer para saber si el ADOQuery encuentra los datos, alguna sugerencia de como hacer la comparacion?
Saludos
softevolutions:
Usa TADODataSet en vez de TADOQuery.
Podrías dejarlo mas o menos así:
AnsiString parametro1,parametro2,parametro3;
parametro1=ComboBox1->Text; //ANIO
parametro2=ComboBox2->Text; //LOCALIDAD
parametro3=ComboBox3->Text; //TRIMESTRE
ADODataSet->CommandText = "select count(*) cuantos from tabla_prueba where [año] = " + parametro1 + " localidad = " + parametro2 + " trimestre = " + parametro3;
NOTA: recuerda que si "localidad" es de tipo texto, deberías dejar parametro 2 entre comillas simples:
ADODataSet->CommandText = "select count(*) cuantos from tabla_prueba where [año] = " + parametro1 + " localidad = '" + parametro2 + "' trimestre = " + parametro3;
ADODataSet->Active = true;
//ahora consulta el valor del campo "cuantos", ya que la consulta SIEMPRE devuelve un registro.
if( ADODataSet->FieldByName("cuantos")->AsInteger == 0 ) {
ShowMessage("no existe");
}
else {
ShowMessage("si existe");
}
//Cuando vayas a consultar otra sentencia que no sepas si devolverá algún registro o no, puedes comprobarlo así
if( ADODataSet->IsEmpty() ) {
ShowMessage("no existe");
}
else {
ShowMessage("si existe");
}
ADODataSet->Active = false;
el bare:
No se puede hacer con el query?, lo que pasa es que ya habia usado los dataset pero los quite porque se me hizo mas facil hacer las consultas con los query...
Ya hice lo que me sugeriste, pero no entiendo lo de "cuantos", eso donde lo voy a declarar o que es lo que hace?, me marca error si lo dejo en el codigo.
softevolutions:
"cuantos" dentro de la consulta SQL no es más de el nombre que le he dado al resultado de la función de agregado "count". He revisado el codigo y no tiene por que darte error. Es un literal que debe ir entre comillas, ya que hace referencia a un nombre de campo de la SQL.
FieldByName("cuantos") es una función de TADODataSet que sirve para devolver un objeto de tipo TField del campo que le hayas indicado entre comillas.
El componente TADODataSet es mucho más versatil que TADOQuery. Yo lo uso y me da muy buenos resultados.
Mi consulta anterior te daba un par de formas de como realizar lo que necesitabas. Si no es lo que buscar, por favor, se un poco más preciso y te ayudaremos en tu problema.
el bare:
Que tal, este es el error que me marca, es de sintaxis, pero no le veo nada raro.. :mellow:
aqui te dejo una imagen y el codigo:
Codigo:
--- Código: C++ --- Tabla->Open();Tabla->Insert(); AnsiString parametro1,parametro2,parametro3; parametro1=ComboBox1->Text; //ANIOparametro2=ComboBox2->Text; //LOCALIDADparametro3=ComboBox3->Text; //TRIMESTRE ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = " + parametro1 + " Localidad = '" + parametro2 + "' Evaluacion = " + parametro3; ADODataSet7->Active = true; if( ADODataSet7->FieldByName("cuantos")->AsInteger == 0 ) { //--------------------------------------------------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); }//FIN IFelse {ShowMessage("REGISTRO EXISTENTE");} //FIN ELSE }
Pense que quizas si le cambiaba el nombre de cuantos por uno de los campos de la abse de datos funcionaria, pero siguio con lo mismo... :o
Navegación
[#] Página Siguiente
Ir a la versión completa