Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema relación maestro-detalle mas filtrado en DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=88556)

DANIEL1818 22-06-2015 01:36:15

Actualización desfasada en DBGrid
 
Hola!! como estan? les cuento lo que me pasa, en ACCESS tengo (entre otras tablas) una tabla de PRODUCTOS y otra COMENTARIOS que la gente realiza para esos productos. En el form tengo un "DBGrid_Productos" donde muestra todos los datos de los productos y otro mas "DBGrid_Comentarios" donde al hacer click sobre uno de los productos (del DBGrid_Productos) se actualiza el "DBGrid_Comentarios" con todos los comentarios de todas las personas que realizaron sobre ese producto.

EL PROBLEMA ES EL SIGUIENTE: cuando me muevo para abajo sobre el DBGrid_PRODUCTOS con las felchas del taclado me muestra correctamente los comentarios sobre el otro dbgrid "DBGrid_COMENTARIOS", pero cuando quiero moverme hacia arriba (también con las flechas del teclado) me los muestra defasados, es decir si tengo:

mesa
bicicleta
silla
celular

cuando estoy parado en el ultimo registro (celular) y subo con las flechas hacia "silla" el cual tiene comentarios este NO se muestra, pero si subo uno mas hasta "bicicleta" recien ahi me muestra el comentario de la silla y asi sucesivamente con los demas productos si sigo subiendo. Porque puede ser que este pasando esto??

ESTE ES EL CODIGO QUE TENGO ASOCIADO AL EVENTO OnDrawColumnCell DEL DBGrd_PRODUCTOS:

Código Delphi [-]
 DM.QueryVerComentariosSub.Close;
  DM.QueryVerComentariosSub.Parameters.ParamByName('identificadorSubasta').Value:= DM.QueryTodasLasCatid_sub.Value; //QueryTodasLasCatid_sub me da el identificador de la 
                                                                       // subasta en la que estoy parado en la grilla de productos.
  DM.QueryVerComentariosSub.Open;

Necesito de sus ayudas!! muchisimas gracias!!

AgustinOrtu 22-06-2015 02:41:29

Hola Daniel.

En realidad el Grid no deberia ser el encargado de realizar el filtrado, su unica funcion es proveer una representacion visual de informacion de un TDataSet. Dicho TDataSet se especifica en la propiedad DataSet del DataSource del Grid. Me seguis?

Entonces, te quedan dos alternativas:

1. Delphi tiene la opcion de configurar relaciones Maestro-Detalle, de esto viene un demo con Delphi y hay millones de ejemplos por todos lados

2. No utilizar un evento del DBGrid, hacerlo en un evento del del DataSet. Prueba a mover tu codigo en el evento AfterScroll del DataSet

DANIEL1818 22-06-2015 03:21:30

Agustin! muchas gracias por tu ayuda tanto en este y otros problemas! la solución maestro-detalle funcionó a la perfección!

DANIEL1818 22-06-2015 18:00:03

Cita:

Empezado por AgustinOrtu (Mensaje 493536)
Hola Daniel.

En realidad el Grid no deberia ser el encargado de realizar el filtrado, su unica funcion es proveer una representacion visual de informacion de un TDataSet. Dicho TDataSet se especifica en la propiedad DataSet del DataSource del Grid. Me seguis?

Entonces, te quedan dos alternativas:

1. Delphi tiene la opcion de configurar relaciones Maestro-Detalle, de esto viene un demo con Delphi y hay millones de ejemplos por todos lados

2. No utilizar un evento del DBGrid, hacerlo en un evento del del DataSet. Prueba a mover tu codigo en el evento AfterScroll del DataSet



Hola Agustin, disculpa las molestias, como te dije la relacion maestro-detalle funciona bien, pero ahora me doy cuenta que dejó de funcionarme los distintos tipos de filtrado de productos (tengo un Edit donde podes filtrar los productos por nombre, y un comboBox que filtra por categoría de producto) y luego de agregar el DBgrid_COMENTARIOS y hacer la relacion Maestro-Detalle dejo de funcionar, y cuando quiero filtrar un producto a traves del EDIT el error que me sale es:

" Project Project1.exe raised exception class EDatabaseError whit message 'Query_soloTitulo: Field 'id_sub' notfound'

donde "Query_soloTitulo" es la consulta que te filtra solo por nombre de producto, y donde "id_sub" es es identificador de cada producto.

No me podrias dar una mano con esto? estoy hace horas y no puedo hacerlo funcionar, Espero tu respuesta. MUCHISIMAS GRACIAS!!

DANIEL1818 22-06-2015 20:22:55

o alguien podrá ayudarme a resolver este problema?? necesito de sus ayudas!

DANIEL1818 22-06-2015 21:17:45

Problema relación maestro-detalle mas filtrado en DBGrid
 
Hola todos! voy directo al grano, tengo un problema que desde hace mucha horas no puedo resolver y me traba con el avance del proyecto, esto es: en una base de datos en ACCESS tengo dos tablas (entre otras mas) de "PRODUCTOS" para vender y otra de "COMENTARIOS" (los comentarios son los que las personas pueden realizar a esos productos). Entonces: en el form principal tengo un DBGrid_productos donde aparecen todos los productos, y un EDIT en el cual realizo filtraciones de productos a traves de su nombre con un ADOQuery.

Luego agrego otro DBGrid_comentarios al mismo form en el cual hice una relacion Maestro-Detalle, osea a medida que navego en el DBGrid_productos me aparecen todos los comentarios para ese producto en el DBGrid_comentarios. Hasta ahi todo bien, EL PROBLEMA SURGE CUANDO: surge cuando quiero realizar el filtrado por nombre de producto y sale el siguiente error:

" Project Project1.exe raised exception class EDatabaseError whit message 'Query_soloTitulo: Field 'id_sub' notfound'

donde "Query_soloTitulo" es la consulta que te filtra solo por nombre de producto, y donde "id_sub" es es identificador de cada producto.

ME PODRIAN DAR UNA MANO? SE LOS AGRADECERIA MUCHISIMO!!

Casimiro Notevi 22-06-2015 21:21:45

No crees nuevos hilos para seguir con el mismo tema, continua en el que has empezado. Gracias.
(He unido ambos hilos)

DANIEL1818 22-06-2015 21:55:20

Cita:

Empezado por Casimiro Notevi (Mensaje 493565)
No crees nuevos hilos para seguir con el mismo tema, continua en el que has empezado. Gracias.
(He unido ambos hilos)




Mil disculpas lo voy a tener en cuenta. Y vos no me podrías ayudar con este problema? ya que sigo sin poder encontrarle la solución. Desde ya muchisimas gracias y disculpa las molestias!!

ecfisa 22-06-2015 22:19:37

Hola Daniel.

Es que no conocemos nada sobre lo que estas consultando...
  • ¿ Con que colección de componentes te conectas a la base de datos ?
  • ¿ Con que componentes específicamente ? Ej: ¿ ADOTable, ADOQuery,... ?
  • ¿ Que tablas y que campos intervienen en la relación master/detail ? (no todos, los significativos)
  • ¿ Sobre que tabla estas intentando el filtrado ?

Saludos :)

DANIEL1818 23-06-2015 00:02:40

Cita:

Empezado por ecfisa (Mensaje 493568)
Hola Daniel.

Es que no conocemos nada sobre lo que estas consultando...
  • ¿ Con que colección de componentes te conectas a la base de datos ?
  • ¿ Con que componentes específicamente ? Ej: ¿ ADOTable, ADOQuery,... ?
  • ¿ Que tablas y que campos intervienen en la relación master/detail ? (no todos, los significativos)
  • ¿ Sobre que tabla estas intentando el filtrado ?

Saludos :)



A la base de datos me conecto mediante un ADOConection (la base esta hecha en access) y utilizo Delphi 2010.

-En el DBGrid_PRODUCTOS que es la 1er grilla (grilla Master) lo tengo asociado a un DataSource que su DatSet esta asociado a un AdoQuery_todasLasCateg que filtra todos los productos.

-En el DBGrid_COMENTARIOS que es la 2da grilla en el mismo Form (grilla Detalle) la tengo asociada a un DataSource el cual su DataSet esta asociado al ADOTable que tiene la Tabla "comentario" de la base de datos ACCESS. Hasta ahi me seguis? En este ADOTable el MasterSource esta asociado al AdoQuery_todasLasCateg dicho al principio, y en el MasterField asocio el id_producto de la tabla COMENTARIOS con el id_producto de la tabla PRODUCTOS.

Ojala me hayas podido entender mejor, y puedas ayudarme, espero tu respuesta, muchísima gracias nuevamente!!

Casimiro Notevi 23-06-2015 01:01:47

Cita:

Empezado por DANIEL1818 (Mensaje 493567)
Mil disculpas lo voy a tener en cuenta. Y vos no me podrías ayudar con este problema? ya que sigo sin poder encontrarle la solución. Desde ya muchisimas gracias y disculpa las molestias!!

Gracias por tu colaboración :)

ecfisa 23-06-2015 01:27:19

Hola Daniel.

Básicamente entiendo la situación pero mencionas que te dá el error,
Cita:

Project Project1.exe raised exception class EDatabaseError whit message 'Query_soloTitulo: Field 'id_sub' notfound'
y eso cláramente te esta diciendo: El campo (o columna) "id_sub" no existe en la consulta que realizas en "Query_soloTitulo".
Es por eso que te solicité mas información, sobre todo es importante la consulta SQL.

A ver si ejemplificando me explico mejor... Si asigno esta consulta a un query:
Código Delphi [-]
  with ADOQuery1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT CL.NOMBRE, CA.NOMBRE_CALLE, CL.NUMERO ');
    SQL.Add('FROM CLIENTE CL ');
    SQL.Add('INNER JOIN CALLE CA ON CL.CALLE_ID = CA.ID');
    SQL.Add('WHERE CL.ID = :IDCLI');
    Parameters.ParamByName('IDCLI').Value := xxx
    Open;
  end;
Y luego le salgo pidiendo:
Código Delphi [-]
   ShowMessage( IntToStr(ADOQuery1.FieldByName('ID_CLIE').Value) );
voy a recibir el mismo mensaje que has recibido, ya que la columna ID_CLIE nunca fué declarada en la sentencia SELECT.

Saludos :)

DANIEL1818 23-06-2015 03:20:43

Muchas gracias por sus ayudas y sus tiempos empleados en ello!! ya lo pude resolver.


La franja horaria es GMT +2. Ahora son las 10:24:03.

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