FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
Uso del DBGrid
Hola, es la primera vez que escribo, sepan disculpar si no me doy a entender correctamente.
El asunto es que tengo un problema con una pequeña aplicación que estoy realizando. Estoy utilizando Delphi 7 y me conecto a MySQL. En el Form tengo los siguientes componentes: 2 DBGrid, 1 Data Source, 1 ADOQuery, 1 ADOConnection. Utilizo dos tablas: libros tiene los siguientes campos (id_libro, titulo, genero, id_editorial, etc) editorial tiene los siguientes campos (id_editorial, nombre, localidad, país, etc). Ambas tablas están relacionadas por id_editorial. Funcionamiento: en el DBGrid1 muestro la información correspondiente a la tabla libros (mediante una consulta sql que hago en el ADOQuery). Problema: Lo que quiero hacer es que al hacer click en un registro del DBGrid1 me muestre en el DBGrid2 los datos de la editorial (tabla editorial) a la que pertenece ese libro. Espero que hayan entendido y puedan ayudarme. Gracias por su atención y saludos. Última edición por Neftali [Germán.Estévez] fecha: 11-08-2010 a las 12:07:24. Razón: Corregido por mala visualización |
#2
|
||||
|
||||
ok, te recomendaria que en vez de un AdoQuery, pusieras dos y por ende dos datasource, en el primer ADOQuery, puedes poner la consulta:
Esto acarrearia todos los libros de a la DBGrid1, en el segundo ADOQuery pondrias:
Ahora en el evento Click de tu DBGrid1 pon este codigo:
Y claro todos los objetos deben estar enlazados correctamente: http://avt7ya.bay.livefilestore.com/...u/q.jpg?psid=1 Espero te sea de utilidad
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes |
#3
|
|||
|
|||
consulta del DBGrid
Hola erickahr, muchisimas gracias por responder, pero tengo algunos problemitas con el codigo. Paso a detallar.
Este es el codigo que me pasaste: ADOQuery2.Close; ADOQuery2.ParamByName('id_editorial').Value := ADOQuery1.FieldByName('id_editorial').AsInteger; ADOQuery2.Open; El problema aparece en la segunda linea del codigo. Este es mi codigo, el que pongo en el evento OnCellClick ADOQuery2.Close; ADOQuery2.Parameters.ParamByName('id_editorial').Value := ADOQuery1.... ADOQuery2.Open; Como puedes ver. Despues del ADOQuery2 tengo que poner Parameters, y luego recien ParamByName. Despues del ADOQuery1 no me aparece la propiedad FieldByName. Cual puede ser el problema? Otra vez gracias por tu atencion y saludos. |
#4
|
||||
|
||||
Hola lucas05, puedes hacer la relación maestro detalle directamente. Necesitas dos AdoQuerys y dos DataSource como te ha indicado erickahr y haces lo siguiente:
1.-En el AdoQueryLibros colocas la consulta "Select * From Libros", enlazas a su DataSource (digamos que se llame DataSourceLibro) y su DBGrid. 2.-En AdoQueryEditoriales colocas "Select * From Editoriales Where id_editorial=:id_editorial" enlazado a su DataSource respectivo, ahora para hacer la relación maestro-detalle, en la propiedad DataSource de tu AdoQueryEditoriales escoges DataSourceLibro. Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#5
|
||||
|
||||
OK, perdon, te comento que la respuesta la escribi 'a patín', ya que no tenia Delphi a la mano, ademas que ya tiene un rato que no uso ADO (actualmente desarrollo con Firebird), pero ya lo revise y en efecto, a mi me funciono con parameters, como lo mencionas.
tambien podrias intentar con:
Aunque siendo sincero, la respuesta de caro me parece una excelente solucion. Saludos;
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes Última edición por erickahr fecha: 11-08-2010 a las 17:05:45. Razón: Error mio :P |
#6
|
|||
|
|||
Hola Caro, tu solución funciono muy bien, gracias.
Pero tengo una consulta, como seria si en lugar de tener 2 tablas tuviera 3 tablas. Paso a explicarte, es el mismo caso que el problema anterior en donde tenia: 2 DBGrid, 2 ADOQuery, 2 DataSource. Pero esta vez tengo 3 tablas que estan relacionadas de la siguiente forma: Tabla A: id_a Tabla B: id_a, id_c Tabla C: id_c Quiero lograr el mismo funcionamiento que en el caso anterior (maestro-detalle), en donde el DBGrid1 muestre la informacion de la Tabla A. Pero ahora en el DBGrid 2 tiene que aparecer la informacion de la Tabla C. Como puedes ver en este caso hay que pasar por una tabla intermedia (Tabla B). Como puedo solucionarlo? Gracias por tu atencion y saludos. |
#7
|
|||
|
|||
nueva consulta DBGrid
Hola erickahr, disculpame que te vuelva a molestar, pero cuando utilizo lineas de código no puedo hacerlo funcionar (aunque la solución de Caro funciona bien).
Este es el codigo que utilizo en el OnCellClick del DBGrid1: ADOQuery2.Close; ADOQuery2.Parameters.ParamValues['id_editorial']:=ADOQuery1.Parameters.ParamValues['id_editorial']; ADOQuery2.Open; Cuando lo compilo no aparece ningun error, pero cuando elijo un registro del DBGrid1 aparece el siguiente mensaje `ADOQuery1: Parameter 'id_editorial' not found´ Te recuerdo que el parametro 'id_editorial' lo defino en el ADOQuery2 que esta conectado al DBGrid2. El ADOQuery1 no sabe de la existencia del parametro 'id_editorial'? Cual puede ser el error? Gracias por tu atencion y saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
DBGrid: Como redimensionar columnas si se redimensiona el dbGrid? | quali | OOP | 6 | 08-02-2010 22:00:49 |
tomar una fila de un DBGrid y traspasarlo a otro DBGrid | micky mouse | Varios | 2 | 05-06-2008 16:24:18 |
Pasar lineas de in dbgrid a otro dbgrid | look | OOP | 3 | 21-09-2007 23:16:29 |
PickList DBGrid (Pregunta acerca de los DBGRID) | lazarous | Varios | 1 | 10-01-2006 09:53:12 |
Como extraer datos de un DBgrid a otro DBgrid | mickey | Conexión con bases de datos | 13 | 29-01-2004 05:05:30 |
|