Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2003
vichovi vichovi is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva (España)
Posts: 59
Poder: 21
vichovi Va por buen camino
Question Problemas con Query

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?
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.
__________________
Vivir a la deriva,
sentir,
que no se que hago aki...

(Extremo)
Responder Con Cita
  #2  
Antiguo 17-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 18-10-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
a parte de lo que te comenta Román, mira tambien que no tengas campos persistentes en esa Query
Responder Con Cita
  #4  
Antiguo 20-10-2003
vichovi vichovi is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva (España)
Posts: 59
Poder: 21
vichovi Va por buen camino
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).

Gracias por la ayuda.
__________________
Vivir a la deriva,
sentir,
que no se que hago aki...

(Extremo)
Responder Con Cita
  #5  
Antiguo 21-10-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por vichovi
Cadetill podrias explicarme que es eso de los campos persistente (y como podria solucionarlo).
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
Responder Con Cita
  #6  
Antiguo 21-10-2003
rodrigo rodrigo is offline
Registrado
 
Registrado: may 2003
Ubicación: Formosa, Argentina
Posts: 7
Poder: 0
rodrigo Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 21-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
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
Responder Con Cita
  #8  
Antiguo 22-10-2003
vichovi vichovi is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva (España)
Posts: 59
Poder: 21
vichovi Va por buen camino
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 )

Ahora tengo solamente la llamada a Open y sigue dando el mismo problema que antes.
__________________
Vivir a la deriva,
sentir,
que no se que hago aki...

(Extremo)
Responder Con Cita
  #9  
Antiguo 22-10-2003
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 22-10-2003
vichovi vichovi is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva (España)
Posts: 59
Poder: 21
vichovi Va por buen camino
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

Un saludo
__________________
Vivir a la deriva,
sentir,
que no se que hago aki...

(Extremo)
Responder Con Cita
  #11  
Antiguo 22-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
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
Responder Con Cita
  #12  
Antiguo 22-10-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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
Responder Con Cita
  #13  
Antiguo 23-10-2003
vichovi vichovi is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva (España)
Posts: 59
Poder: 21
vichovi Va por buen camino
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 .

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.

Bueno muchas gracias a todos por todo y un saludo.
__________________
Vivir a la deriva,
sentir,
que no se que hago aki...

(Extremo)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:57:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi