Los Foros de ASPTutor.com
Home | Perfil | Registrarse | Temas Activos | Miembros | Buscar | FAQ
Usuario:
Password:
 Todos los Foros
 .NET
 Mostrar Relation en DataList (emular un LEFT JOIN)
 Foro Bloqueado  Tema Bloqueado


Autor Temas
Pseudolus
Starting Member

España
6 Posts
Mensajes - 21 Nov 2007 :  17:52:02  Ver Perfil  Enviar Email
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


   
 Foro Bloqueado  Tema Bloqueado
Ir a:
Los Foros de ASPTutor.com Los Foros de ASPTutor.com
Ir al principio de la Página

 Imprimir Tema
 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar