Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 10-08-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
ok, te recomendaria que en vez de un AdoQuery, pusieras dos y por ende dos datasource, en el primer ADOQuery, puedes poner la consulta:
Código SQL [-]
Select id_libro, titulo, genero, id_editorial, etc from libros

Esto acarrearia todos los libros de a la DBGrid1, en el segundo ADOQuery pondrias:
Código SQL [-]
Select id_editorial, nombre, localidad, país, etc from editoriales
Where id_editorial = :id_editorial

Ahora en el evento Click de tu DBGrid1 pon este codigo:
Código Delphi [-]
ADOQuery2.Close;
ADOQuery2.ParamByName('id_editorial').Value := AdoQuery1.FieldByName('id_editorial ').AsInteger;
ADOQuery2.Open;

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
Responder Con Cita
  #3  
Antiguo 11-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 11-08-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 11-08-2010
Avatar de erickahr
erickahr erickahr is offline
Miembro
 
Registrado: feb 2010
Posts: 94
Poder: 15
erickahr Va por buen camino
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.

Código Delphi [-]
ADOQuery1.Parameters.ParamByName('id_editorial').Value := ADOQuery2.Parameters.ParamByName(''id_editorial').Value;

tambien podrias intentar con:

Código Delphi [-]
ADOQuery1.Parameters.ParamValues['id_editorial'] := ADOQuery2.Parameters.ParamValues['id_editorial'] ;

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
Responder Con Cita
  #6  
Antiguo 12-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 12-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
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.
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

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


La franja horaria es GMT +2. Ahora son las 12:56:48.


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