Foros del Web » Programación para mayores de 30 ;) » .NET »

Mostrar Relation en DataList (emular un LEFT JOIN)

Estas en el tema de Mostrar Relation en DataList (emular un LEFT JOIN) en el foro de .NET en Foros del Web. Ante todo, disculpas adelantadas por la explicación tan rara que he puesto en el anuncio. A ver si ahora me explico mejor... Tengo dos bases ...
  #1 (permalink)  
Antiguo 21/11/2007, 11:13
 
Fecha de Ingreso: diciembre-2003
Mensajes: 3
Antigüedad: 20 años, 5 meses
Puntos: 0
Mostrar Relation en DataList (emular un LEFT JOIN)

Ante todo, disculpas adelantadas por la explicación tan rara que he puesto en el anuncio. A ver si ahora me explico mejor...

Tengo dos bases de datos estadísticas: una en DB2, otra en SQL (accedo a ambas sin ningún tipo de problemas). La consulta que realizo sobre ellas me da una fecha y el número de impactos recibidos en la fecha en cuestión. No pongo las consultas (son un poco gordas), pero los campos que obtengo son

FECHA, IMPACTOSDB2 en la base de datos DB2
FECHA, IMPACTOSSQL en la base de datos SQL

Quiero mostrar estos datos en un único control (un DataList, por ejemplo), por lo que necesito "unir" las consultas. De estar en una misma base de datos, un LEFT JOIN bastaría, pero al estar en bases de datos distintas tengo que echar mano de las relaciones (a no ser que haya algún método alternativo)

En primer lugar, vuelco ambas consultas (una obtenida mediante un DB2DataAdapter, la otra mediante un SQLDataAdapter) en un DataSet

MyAdpDB2.Fill(MyDataSet, "ImpactosDB2")
MyAdpSQL.Fill(MyDataSet, "ImpactosSQL")

Seguidamente, realizo la relación pertinente, utilizando el campo FECHA (el cual es idéntico en ambos casos)

MyDataSet.Relations.Add("RelacionFechas", MyDataSet.Tables("ImpactosDB2").Columns("Fecha"), MyDataSet.Tables("ImpactosSQL").Columns("Fecha"), True)

La relación se realiza correctamente (a cada registro DB2 le corresponde un único registro SQL); esto lo compruebo con el siguiente código

Dim Fila1, Fila2 As DataRow
For Each Fila1 In MyDataSet.Tables("ImpactosDB2").Rows
Response.Write(Fila1("Fecha").ToString & "-" & Fila1("ImpactosDB2").ToString & " - ")
For Each Fila2 In Fila1.GetChildRows("RelacionFechas")
Response.Write(Fila2("Fecha").ToString & "-" & Fila2("ImpactosSQL").ToString & "<BR>")
Next
Next

El problema viene al pasar estos datos a un control, y es que no encuentro la manera de pasarlos todos

GridView1.DataSource = MyDataSet
GridView1.DataBind()

Esto, por ejemplo, sólo me carga en el GridView el contenido de la tabla en DB2 (la primera que he cargado en el DataSet)

GridView1.DataSource = MyDataSet.Tables("ImpactosSQL").DefaultView
GridView1.DataBind()

Aquí pasa lo contrario (obvio por otra parte, al hacer referencia directa a la tabla SQL)

He probado a meterle como DataSource la relación (que sería lo lógico), pero me da error

GridView1.DataSource = MyDataSet.Relations("RelacionFechas")
GridView1.DataBind()

Ignoro si es porque no se puede, o porque lo hago mal. La teoría es que si le cargo la relación, tendré un GridView con 4 columnas (las dos de DB2 y las dos de SQL), pero por ahora no lo he conseguido

¿Sabe alguien si lo que estoy intentando es utópico, o si hay alguna solución? A malas, ¿hay alguna manera de rellenar "a pelo" el GridView, utilizando el bucle que he mostrado antes?

Espero haber sido lo suficientemente claro en las explicaciones. Gracias a todos por adelantado
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 10:51.