PDA

Ver la Versión Completa : Problemas con Query


vichovi
17-10-2003, 20:36:54
Hola a to@s:

Tengo un problema curiosisimo con un Query (es un Query de Zeos para acceder a BD MySQL). A ver como lo explico:

Si abro un Query con una consuta SQL (llamado msqAlbaranes que se haya en un DataModule llamado dmDatos), este Query se lo asigno al DataSet de un DataSource para mostrar el contenido del Query en un control DBGrid. Al terminar de usarlo cierro el form y el Query (con un dmDatos.msqAlbaranes.Close). Hasta ahi todo bien.

Pero si despues cargo el Query con otra consulta de otra tabla hago algo tal que asi:

...
dmDatos.msqAlbaranes.Close; //Lo vuelvo a cerrar por si acaso
dmDatos.msqAlbaranes.SQL.Clear; //Limpio el SQL
... //Cargo la SQL
...
dmDatos.msqAlbaranes.ExecSQL; //Ejecuto la SQL
dmDatos.msqAlbaranes.Open; //y abro la consulta

Al ejecutar esta ultima instrucción me da el suiguiente error:

Unknown field PAGADO.

El campo pagado no forma parte de la consulta SQL, ni siquiera forma parte de la tabla que tiene que devolver (con las retricciones impuestas en la cunsulta), sin embargo PAGADO si forma parte de los campos devueltos por la primera consulta.

¿Qué creeis que este ocurriendo?:confused:
Es como si la primera consulta no se destruyera y siguiera habiendo algun tipo de vinculo en memoria.

Con este problema llevo liado mas de dos semanas, he revisado y requetevisado el codigo y no veo ningun problema.

Agradeceria me dieran su opinión.

Un saludo a tod@s y gracias por su tiempo.

roman
17-10-2003, 20:49:20
Creo que esto pasa porque la propiedad Fields del Query se queda con los campos de la primera consulta. Intenta usar el método Clear de Fields:

dmDatos.msqAlbaranes.Fields.Clear;

// Saludos

__cadetill
18-10-2003, 10:40:56
a parte de lo que te comenta Román, mira tambien que no tengas campos persistentes en esa Query :p

vichovi
20-10-2003, 21:03:01
Lo que comenta Roman de:
dmdatos.msqAlbaranes.Fields.Clear;

sigue dando el mismo error.

Cadetill podrias explicarme que es eso de los campos persistente (y como podria solucionarlo).:confused:

Gracias por la ayuda.

__cadetill
21-10-2003, 15:10:59
Posteado originalmente por vichovi
Cadetill podrias explicarme que es eso de los campos persistente (y como podria solucionarlo).:confused:

Los campos persistentes son los que agregamos al componente TTable o TQuery (por ejemplo) haciendo un doble clic encima de él, en la pantalla que sale hacer clic con el botón derecho y seleccionar Add All Fields o New Field o Add Fields

rodrigo
21-10-2003, 17:59:26
Hola,

No entiendo porque haces primero un execsql y luego le haces open.
Tienes que ejecutar una de las dos instrucciones, no las dos; y eso va a depender del tipo de query que sea:
1. Query que devuelve un dataset: open (o active:=true).
2. Query que no devuelve un dataset: ExecSql.

En tu caso particular no te sabría decir cual de las 2 instrucciones corresponde, ya que no escribiste cual es el sql que cargas en msqALbaranes.

Espero te sirva

Saludos
Rodrigo

roman
21-10-2003, 18:03:56
Posteado originalmente por rodrigo
No entiendo porque haces primero un execsql y luego le haces open.

¡Uuy! ¡Muy bien observado! Se nos había pasado a todos

// Saludos

vichovi
22-10-2003, 02:53:14
El campo no es persistente (gracias por la explicacion Cadetill).

En cuanto a lo que comentaba Roman ciertamente la llamada a ExecSQL se puede quitar (aunque parezca obvio no lo sabia :D )

Ahora tengo solamente la llamada a Open y sigue dando el mismo problema que antes.

Ruben_Cu
22-10-2003, 06:02:17
Hola vichovi, si ya revisastes que no tienes campos persistentes como apunto cadetill y limpias la consulta anterior como señalo Román...uff pienso solo va quedando revisar que tienes escrito en la propiedad SQL de query para ver si ahi tienes declarado por diseño el campo PAGADO o hacer una busqueda en Find in Files a ver si por otro lado tienes ese campo asociado como parámetro al query.
Ojala la solución sea otra eso siempre es bueno para aprender.:)
Saludos

vichovi
22-10-2003, 18:28:45
He descubierto una cosa:

El mensaje de que no encuentra un campo contiene primer campo que muestro en el DBGrid. En el DBGrid si quito el campo pagado y muestro en primer lugar cualquier otro el mensaje de error que me da es:

Unknown field Campo

Donde Campo es el primer campo que muestro en el citado DBGrid.

He revisado y requetevisado el codigo y una vez abro la citada ventana (la ventana que explicaba en el primer post), apartir de entonces todas las consultas en las que utilizo el mismo Query me dan el mismo error.

Tendre encantado el ordenador :confused:

Un saludo

roman
22-10-2003, 18:39:11
Posteado originalmente por vichovi
En el DBGrid si quito el campo pagado y muestro en primer lugar cualquier otro

Pareciera que estás agregando columnas al DBGrid durante el diseño. Si es así es claro que te marque el error; la primera columna contiene una referencia a un campo que no existe en la segunda consulta. En tal caso tendrías que agregar

DBGrid1.Columns.Clear;

antes de abrir la segunda consulta.

// Saludos

__cadetill
22-10-2003, 19:43:21
Tambien puede ser que, una vez abierto el form que contiene el Grid, no lo destruyas, por lo que, al estar ligado a la Query mediante el TDataSource, te pida el campo ese en la sentencia SQL

vichovi
23-10-2003, 21:30:34
Al final he solucionado el problema. Era problema con los indices.

En el formulario problemático, en el FormClose, he puesto:

dmdatos.msqAlbaranes.IndexFieldNames:='';

y adios error :D.

Todo esto porque al hacer click en una columna del DBGrig ordeno por el campo en cuestion (asignando a la propiedad el campo de ordenacion).

4 dias por una cagadita como esta.:rolleyes:

Bueno muchas gracias a todos por todo y un saludo.