Viernes 8 de Noviembre de 2024, 07:06
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
»
C++ Builder
(Moderador:
Eternal Idol
) »
Duda con ADOQuery?
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Duda con ADOQuery? (Leído 5072 veces)
el bare
Miembro activo
Mensajes: 65
Nacionalidad:
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++
AnsiString parametro1,parametro2,parametro3
;
parametro1
=
ComboBox1
-
>
Text
;
//ANIO
parametro2
=
ComboBox2
-
>
Text
;
//LOCALIDAD
parametro3
=
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
Tweet
softevolutions
Miembro activo
Mensajes: 84
Nacionalidad:
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:
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:
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:
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..
aqui te dejo una imagen y el codigo:
Codigo:
Código: C++
Tabla
-
>
Open
(
)
;
Tabla
-
>
Insert
(
)
;
AnsiString parametro1,parametro2,parametro3
;
parametro1
=
ComboBox1
-
>
Text
;
//ANIO
parametro2
=
ComboBox2
-
>
Text
;
//LOCALIDAD
parametro3
=
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 IF
else
{
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...
softevolutions
Miembro activo
Mensajes: 84
Nacionalidad:
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:
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...
Que pueder estar mal??..
softevolutions
Miembro activo
Mensajes: 84
Nacionalidad:
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:
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++
Tabla
-
>
Open
(
)
;
Tabla
-
>
Insert
(
)
;
AnsiString parametro1,parametro2,parametro3
;
parametro1
=
ComboBox1
-
>
Text
;
//ANIO
parametro2
=
ComboBox2
-
>
Text
;
//LOCALIDAD
parametro3
=
ComboBox3
-
>
Text
;
//EVALUACION
//LE MODIFIQUE AQUI, ANTES ESTABA ASI
//ADODataSet7->CommandText = "select count(*) cuantos from Tabla_Prueba where [Año] = " + parametro1 + " AND Localidad = '" + parametro2 + "' AND //Evaluacion = " + parametro3;
ADODataSet7
-
>
CommandText
=
"select count(*) cuantos from Tabla_Prueba where [Año] = '"
+
parametro1
+
"' AND Localidad = '"
+
parametro2
+
"' AND 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 IF
else
{
ShowMessage
(
"REGISTRO EXISTENTE"
)
;
}
//FIN ELSE
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:
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:
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:
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:
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....
Perdona las molestias, y muchas gracias por tu ayuda amigo...
Saludos...
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
»
C++ Builder
(Moderador:
Eternal Idol
) »
Duda con ADOQuery?