• Sábado 14 de Diciembre de 2024, 18:07

Autor Tema:  Duda con ADOQuery?  (Leído 5137 veces)

el bare

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: mx
    • Ver Perfil
Duda con ADOQuery?
« en: Jueves 3 de Junio de 2010, 05:52 »
0
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++
  1.  
  2.  
  3. AnsiString parametro1,parametro2,parametro3;
  4.  
  5. parametro1=ComboBox1->Text; //ANIO
  6. parametro2=ComboBox2->Text; //LOCALIDAD
  7. parametro3=ComboBox3->Text; //TRIMESTRE
  8.  
  9.  
  10. ADOQuery1->SQL->Text = "SELECT * FROM Tabla_Prueba WHERE Año = "+parametro1+",Localidad = "+parametro2+" AND Evaluacion = "+parametro3+" ";
  11.  
  12. if(ADOQuery1==TRUE){
  13.  
  14. ShowMessage("DATOS YA EXISTENTES");
  15. }
  16.  
  17.  
  18.  
  19.  

Pero no funciona, no se como hacer para saber si el ADOQuery encuentra los datos, alguna sugerencia de como hacer la comparacion?

Saludos

softevolutions

  • Miembro activo
  • **
  • Mensajes: 84
  • Nacionalidad: es
    • Ver Perfil
    • http://www.softevolutions.es
Re: Duda con ADOQuery?
« Respuesta #1 en: Jueves 3 de Junio de 2010, 09:04 »
0
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;
:: Lo que puedes hacer sólo lo limita tu propia imaginación ::
Soft Evolutions Technology - http://www.softevolutions.es

el bare

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con ADOQuery?
« Respuesta #2 en: Domingo 6 de Junio de 2010, 02:23 »
0
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

  • Miembro activo
  • **
  • Mensajes: 84
  • Nacionalidad: es
    • Ver Perfil
    • http://www.softevolutions.es
Re: Duda con ADOQuery?
« Respuesta #3 en: Domingo 6 de Junio de 2010, 14:47 »
0
"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.
:: Lo que puedes hacer sólo lo limita tu propia imaginación ::
Soft Evolutions Technology - http://www.softevolutions.es

el bare

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con ADOQuery?
« Respuesta #4 en: Lunes 7 de Junio de 2010, 04:39 »
0
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++
  1.  
  2. Tabla->Open();
  3. Tabla->Insert();
  4.  
  5. AnsiString parametro1,parametro2,parametro3;
  6.  
  7. parametro1=ComboBox1->Text; //ANIO
  8. parametro2=ComboBox2->Text; //LOCALIDAD
  9. parametro3=ComboBox3->Text; //TRIMESTRE
  10.  
  11.  
  12. ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = " + parametro1 + " Localidad = '" + parametro2 + "' Evaluacion = " + parametro3;
  13.  
  14. ADODataSet7->Active = true;
  15.  
  16. if( ADODataSet7->FieldByName("cuantos")->AsInteger == 0 ) {
  17.  
  18.  
  19.  
  20. //--------------------------------------------------
  21. Tabla->FieldByName("Casos_sospechosos_colera_est")->AsString = Edit1->Text;
  22. Tabla->FieldByName("casos_diarrea_notif_SUIVE")->AsString = Edit2->Text;
  23. Tabla->FieldByName("casos_sospechosos_coleratrat")->AsString = Edit7->Text;
  24. Tabla->FieldByName("Total_casos_colera")->AsString = Edit8->Text;
  25. Tabla->FieldByName("cepas_positivasvibrio")->AsString = Edit18->Text;
  26. Tabla->FieldByName("Total_muestrasproc")->AsString = Edit19->Text;
  27. Tabla->FieldByName("Deter_cloro")->AsString = Edit26->Text;
  28. Tabla->FieldByName("Total_detercloro")->AsString = Edit27->Text;
  29.  
  30. //------------------------------------------------------
  31. Tabla->FieldByName("ID_coberturadeteccion")->AsString = Edit3->Text;
  32. Tabla->FieldByName("ID_tratoportuno")->AsString = Edit9->Text;
  33. Tabla->FieldByName("ID_eficiencialab")->AsString = Edit20->Text;
  34. Tabla->FieldByName("ID_cloracionagua")->AsString = Edit28->Text;
  35. //------------------------------------------------------
  36. Tabla->FieldByName("P_coberturadeteccion")->AsString = Edit14->Text;
  37. Tabla->FieldByName("P_tratoportuno")->AsString = Edit15->Text;
  38. Tabla->FieldByName("P_eficiencialab")->AsString = Edit21->Text;
  39. Tabla->FieldByName("P_cloracionagua")->AsString = Edit29->Text;
  40.  
  41. Tabla->FieldByName("Año")->AsString = ComboBox1->Text;
  42. Tabla->FieldByName("Localidad")->AsString = ComboBox2->Text;
  43. Tabla->FieldByName("Evaluacion")->AsString = ComboBox3->Text;
  44.  
  45.  
  46.  
  47.  
  48. Tabla->Post();
  49. Application->MessageBox ("Datos Grabados en la BD","Aviso", MB_OK);
  50.  
  51.  
  52. }//FIN IF
  53. else {
  54. ShowMessage("REGISTRO EXISTENTE");
  55. } //FIN ELSE
  56.  
  57.  
  58.  
  59. }
  60.  
  61.  

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

softevolutions

  • Miembro activo
  • **
  • Mensajes: 84
  • Nacionalidad: es
    • Ver Perfil
    • http://www.softevolutions.es
Re: Duda con ADOQuery?
« Respuesta #5 en: Lunes 7 de Junio de 2010, 10:28 »
0
Tienes un error en la SQL que le indicas en el TADODataSet

//MAL
ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = " + parametro1 + " Localidad = '" + parametro2 + "' Evaluacion = "  + parametro3;


//BIEN
ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = " + parametro1 + " AND Localidad = '" + parametro2 + "' AND Evaluacion = "  + parametro3;
//Te faltaban los AND en la evaluación del WHERE
:: Lo que puedes hacer sólo lo limita tu propia imaginación ::
Soft Evolutions Technology - http://www.softevolutions.es

el bare

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con ADOQuery?
« Respuesta #6 en: Martes 8 de Junio de 2010, 02:07 »
0
Que tal, me sigue marcando error, ahora es este:



Le hice las correcciones de los AND que me sugeriste..
El campo Evaluacion antes era llamado Trimestre, pense que lo tenia asi (trimestre)en la base de datos, pero esta como evaluacion... :mellow:
Que pueder estar mal??.. :mellow:  :mellow:

softevolutions

  • Miembro activo
  • **
  • Mensajes: 84
  • Nacionalidad: es
    • Ver Perfil
    • http://www.softevolutions.es
Re: Duda con ADOQuery?
« Respuesta #7 en: Martes 8 de Junio de 2010, 09:05 »
0
Pon el trozo de código completo, pues así no puedo ver la palabra "Trimestre" para ver cual es el error.
:: Lo que puedes hacer sólo lo limita tu propia imaginación ::
Soft Evolutions Technology - http://www.softevolutions.es

el bare

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con ADOQuery?
« Respuesta #8 en: Miércoles 9 de Junio de 2010, 00:24 »
0
Que tal,aqui esta el codigo:

Código: C++
  1.  
  2. Tabla->Open();
  3. Tabla->Insert();
  4.  
  5. AnsiString parametro1,parametro2,parametro3;
  6.  
  7. parametro1=ComboBox1->Text; //ANIO
  8. parametro2=ComboBox2->Text; //LOCALIDAD
  9. parametro3=ComboBox3->Text; //EVALUACION
  10.  
  11. //LE MODIFIQUE AQUI, ANTES ESTABA ASI
  12. //ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = " + parametro1 + " AND Localidad = '" + parametro2 + "' AND //Evaluacion = " + parametro3;
  13.  
  14. ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = '"+parametro1+"'  AND Localidad = '"+parametro2+"' AND Evaluacion = '"+parametro3+"' ";
  15. ADODataSet7->Active = true;
  16.  
  17. if( ADODataSet7->FieldByName("cuantos")->AsInteger == 0 ) {
  18.  
  19.  
  20.  
  21. //--------------------------------------------------
  22. Tabla->FieldByName("Casos_sospechosos_colera_est")->AsString = Edit1->Text;
  23. Tabla->FieldByName("casos_diarrea_notif_SUIVE")->AsString = Edit2->Text;
  24. Tabla->FieldByName("casos_sospechosos_coleratrat")->AsString = Edit7->Text;
  25. Tabla->FieldByName("Total_casos_colera")->AsString = Edit8->Text;
  26. Tabla->FieldByName("cepas_positivasvibrio")->AsString = Edit18->Text;
  27. Tabla->FieldByName("Total_muestrasproc")->AsString = Edit19->Text;
  28. Tabla->FieldByName("Deter_cloro")->AsString = Edit26->Text;
  29. Tabla->FieldByName("Total_detercloro")->AsString = Edit27->Text;
  30.  
  31. //------------------------------------------------------
  32. Tabla->FieldByName("ID_coberturadeteccion")->AsString = Edit3->Text;
  33. Tabla->FieldByName("ID_tratoportuno")->AsString = Edit9->Text;
  34. Tabla->FieldByName("ID_eficiencialab")->AsString = Edit20->Text;
  35. Tabla->FieldByName("ID_cloracionagua")->AsString = Edit28->Text;
  36. //------------------------------------------------------
  37. Tabla->FieldByName("P_coberturadeteccion")->AsString = Edit14->Text;
  38. Tabla->FieldByName("P_tratoportuno")->AsString = Edit15->Text;
  39. Tabla->FieldByName("P_eficiencialab")->AsString = Edit21->Text;
  40. Tabla->FieldByName("P_cloracionagua")->AsString = Edit29->Text;
  41.  
  42. Tabla->FieldByName("Año")->AsString = ComboBox1->Text;
  43. Tabla->FieldByName("Localidad")->AsString = ComboBox2->Text;
  44. Tabla->FieldByName("Evaluacion")->AsString = ComboBox3->Text;
  45.  
  46.  
  47.  
  48.  
  49. Tabla->Post();
  50. Application->MessageBox ("Datos Grabados en la BD","Aviso", MB_OK);
  51.  
  52.  
  53. }//FIN IF
  54. else {
  55. ShowMessage("REGISTRO EXISTENTE");
  56. } //FIN ELSE
  57.  
  58.  
  59.  

Sobre la parte que le modifique, ya no medio el error, pero no funciona, sigue agregando registros aunque ya esten.
Sobre lo de trimestre no se donde puede estar el error, ya que le reemplaze todo lo que tenia trimestre por evaluacion.

softevolutions

  • Miembro activo
  • **
  • Mensajes: 84
  • Nacionalidad: es
    • Ver Perfil
    • http://www.softevolutions.es
Re: Duda con ADOQuery?
« Respuesta #9 en: Miércoles 9 de Junio de 2010, 11:08 »
0
para añadir un nuevo registro, te falta la sentencia

Tabla->Append();

Puego añades los valores y por ultimo

Tabla->Post();
:: Lo que puedes hacer sólo lo limita tu propia imaginación ::
Soft Evolutions Technology - http://www.softevolutions.es

el bare

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con ADOQuery?
« Respuesta #10 en: Jueves 10 de Junio de 2010, 02:37 »
0
Los registros se añaden aunque no tenga el append, se lo puse y siguio lo mismo

softevolutions

  • Miembro activo
  • **
  • Mensajes: 84
  • Nacionalidad: es
    • Ver Perfil
    • http://www.softevolutions.es
Re: Duda con ADOQuery?
« Respuesta #11 en: Jueves 10 de Junio de 2010, 11:44 »
0
Disculpa pero no veo error aparente en el codigo, y tampoco vi el Insert(), por eso te comente lo del Append().

En que linea te salta el error?. cuando activas el dataset?. Hay algún apostrofe en el campo Evaluación?, en el ComboBox
:: Lo que puedes hacer sólo lo limita tu propia imaginación ::
Soft Evolutions Technology - http://www.softevolutions.es

el bare

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con ADOQuery?
« Respuesta #12 en: Viernes 11 de Junio de 2010, 03:36 »
0
Que tal, fijate que ya resolvi el problema, lo que tuve que hacer fue declarar esos campos como claves primarias en la base de datos y asi el gestor se encarga  de que no haya duplicados.... :comp:
Perdona las molestias, y muchas gracias por tu ayuda amigo... :good:  :good:

Saludos... :hola:  :hola: