Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Agregar Columna DataGrid, con dos consultas

Estas en el tema de Agregar Columna DataGrid, con dos consultas en el foro de Visual Basic clásico en Foros del Web. Hola compañeros(as) Tengo el siguiente problema, tengo que hacer consultas a mi BD y volcar los resultados en un DataGrid, pero son dos consultas, distintas ...
  #1 (permalink)  
Antiguo 24/01/2005, 07:38
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años, 1 mes
Puntos: 0
Agregar Columna DataGrid, con dos consultas

Hola compañeros(as)

Tengo el siguiente problema, tengo que hacer consultas a mi BD y volcar los resultados en un DataGrid, pero son dos consultas, distintas tablas.

Me gustaria saber si existe la posibilidad de tener esas dos consultas en el mismo Datagrid y agregar una columna para la segunta consulta al DataGrid.

N° nombre Edad Hijos Estado
012 Luis 59 3 casado
098 Pedro 29 1 casado

Algo asi deberia quedarme el DataGrid, incluyendo la columna de la segunda consulta que en este caso seria Hijos.

Bueno compañeros de antemano se Agradece.
Saludos desde Viña del Mar, CHILE

Última edición por juan007; 24/01/2005 a las 07:40
  #2 (permalink)  
Antiguo 24/01/2005, 07:58
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
Hola. ¿No hay manera de unir las dos consultas en una? Algo como:

Select Num, Nombre, Edad, CantHijos, Estado, NomHijo From Padres, Hijos Where Padres.CodPadre = Hijos.CodPadre

De esa manera podrias vincular el DataGrid con una sola consulta

Otra manera sería utilizar un MsFlexGrid. Particularmente me parece mucho mas flexible (como el nombre lo indica) ya que se pueden agregar las columnas, filas y los datos de las celdas a mano, sin necesidad de utilizar DataSource, lo que te limita a una sola consulta select, pero no se cuan avanzado estas con tu DataGrid...

Saludos. Lucas
  #3 (permalink)  
Antiguo 24/01/2005, 09:10
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años, 1 mes
Puntos: 0
Pero como agrego la otra consulta que voy a ir a buscar a la tabla hijos en el mxflexgrid.

Suponiendo que ya tengo el msflexgrid lleno con la primera consulta, como inserto una columna entre medio y ademas que me respetes los valores de las columnas y filas.

Por ejemplo
Si en una fila esta el codigo 012 el nombre pedro su estado casado, deberia ir a la tabla buscar el codigo 012 y listar los hijos del codigo 012, imagina si tuviera 100 resultados en mi primera consulta ... creoo que no seria optimo ya que tendria que abrir 100 veces la base de datos y 100 veces consultar por cierto codigo para que me concuerden los datos entre las filas.

Bueno no se que hacer, creoo que necesito ahora opiniones de como puedo resolver esto habra algun otro control mas flexible.

De antemano se agradece
Saludos desde Viña del Mar, CHILE
  #4 (permalink)  
Antiguo 24/01/2005, 09:34
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
Cita:
Iniciado por juan007
Suponiendo que ya tengo el msflexgrid lleno con la primera consulta, como inserto una columna entre medio y ademas que me respetes los valores de las columnas y filas.
El MsFlexGrid tiene una propiedad llamada FormatString. Es una cadena que te sirve para definir las columnas de la grilla. Un ejemplo:

Código:
 MsFlexGrid1.FormatString = "|<Nombre		|<Apellido	|<Edad	"
Cada "|<..." genera una columna. Los espacios en blanco son para darle el ancho a la columna.


Cita:
Iniciado por juan007
imagina si tuviera 100 resultados en mi primera consulta ... creoo que no seria optimo ya que tendria que abrir 100 veces la base de datos y 100 veces consultar por cierto codigo para que me concuerden los datos entre las filas.
No tanto, en realidad todo depende en que máquina se este corriendo el sistema.

En fin, esperemos que se solucione
Saludos. Lucas
  #5 (permalink)  
Antiguo 24/01/2005, 10:56
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años, 1 mes
Puntos: 0
OK...pero como le asigno a la nueva columna de msflexgrid (hijos) la segunda consulta.
With Msflexgrid1
.Clear
.Cols = 4
.Rows = 1
.FormatString = "Numero |Nombre |edad |Hijos |Estado "
End With

ya tengo el flekgrid con la nueva columna, ahora deberia hacer una consulta a mi otra tabla para llenar la columna hijo(Columna creada) esta consulta deberia tomar los valores msflexgrid1.TextMatrix(columna nueva,i) moviendo el i para buscar el numero.

hasta aca todo bien creooo ahora deberia abrir la BD crear una query registro por registro y asignarle el valor a cada celda del flexgrid.

Lo que me complica creooo (ya que aun no tengo hecho el codigo de todo lo que e escrito) es si puedo tener un Repita hasta.

por ejemplo no se si se puedo hacer esto.

repeat
dim MiRec as adodb.recordset
Abredb
set MiRec = new Adodb.recordset
MiRec.activeconnection=DB
MiREc.cursor.Location=AdUseClient
....
....
MiRec.open"Select Cantidad from [Hijos] where Numero=" + flexgrid1.TextMatrix(numero, i) + ";"
msflexgrid1.TextMatrix(Columna nueva,i)=mirec!cantidad
MiRec.movenet
i=i+1
until(i=Mirec.recordcount)

Bueno espero haber sido claro

De antemano se agradece cualquier sugerencia o critica.
  #6 (permalink)  
Antiguo 24/01/2005, 11:36
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
seguimos probando...

Si. Esa es la idea, recorre todo el Msflexgrid y abri un recordset por cada fila, utilizando como filtro el número de padre, que te sirve para traer los hijos correspondientes, y en la posicion de la nueva columna (segun tu formatstring, la nueva columna es la 6º) agrega los datos del recordset, tal como lo listaste... O sea que en lugar de msflexgrid1.TextMatrix(Columna nueva,i)=mirec!cantidad
vas a tener msflexgrid1.TextMatrix(6,i)=mirec!cantidad

Exitos con el código!
Saludos. Lucas
  #7 (permalink)  
Antiguo 24/01/2005, 13:13
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años, 1 mes
Puntos: 0
Lucas.

Gracias por tu tiempo y dedicacion.

vamos a ver que resulta programando.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:51.