Consultar 2 tablas en 1 DataSet [SOLUCIONADO]

Iniciado por novalida, 25 Marzo 2010, 21:36 PM

0 Miembros y 1 Visitante están viendo este tema.

novalida

Hola!!!
Llevo un par de días dando vueltas a este problema y no doy con la solución. A ver si alguien me puede orientar un poquito :)
Desde un formulario quiero realizar una consulta de los libros prestados de una biblioteca.
Las tablas Libros y Prestamos están en un archivo Access y sus columnas son:

Libros
Id_libro / Título / Autor

Prestamos

Nif_socio (de la tabla Socios) / Id_libro

Parte de mi código para la definición de conexión y consulta:

   Private oConexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data source=C:\Biblioteca.mdb")
   Private oDataAdapter As OleDbDataAdapter
   Private oCommandBuilder As OleDbCommandBuilder
   Private oDataSet As DataSet
   Private SQL As String


Private Sub ConsultaBasePrestamos()
       Me.SQL = "select * from Libros, Prestamos"
       Me.oDataAdapter = New OleDbDataAdapter(Me.SQL, Me.oConexion)
       Me.oCommandBuilder = New OleDbCommandBuilder(Me.oDataAdapter)
       Me.oDataSet = New DataSet

       Me.oConexion.Open()
       Me.oDataAdapter.Fill(Me.oDataSet, "Prestamos")
       Me.oDataAdapter.Fill(Me.oDataSet, "Libros")
       Me.oConexion.Close()

       Dim oDataRow0 As DataRow ' Variable para trabajar con las filas de Prestamos
       Dim oDataRow1 As DataRow 'Variable apra trabajar con las filas de Libros
       Dim oDataTable As DataTable ? 'Tabla para almacenar la consulta

       ' Procedimiento para obtener los libros prestados
       For i As Integer = 0 To Me.oDataSet.Tables(0).Rows.Count - 1
           oDataRow0 = Me.oDataSet.Tables(0).Rows(i)
           For j As Integer = 0 To Me.oDataSet.Tables(1).Rows.Count - 1
               oDataRow1 = Me.oDataSet.Tables(1).Rows(j)
               If oDataRow0("Id_libro") = oDataRow1("Id_libro") Then
                   oDataTable = (oDataRow1.Table)
               End If
           Next
       Next
   End Sub


Al ejecutar me da el siguiente error: "La columna 'Id_libro' no pertenece a la tabla Prestamos."
La columna existe en la tabla, pero no sé por qué me da este error.
Alguien me puede ayudar?

Gracias :)

CeLaYa

que tal buenos días


tu problema esta en la consulta sql "select * from Libros, Prestamos"
lo que pasa es que debes poner que campos tomara de cada tabla, ponla así:

SELECT L.Id_libro, L.Título, L.Autor, P.Nif_socio
FROM Libros L, Prestamos P
WHERE L.id_libro = P.id_Libro


con esto tendras una lista de los libros prestados y ya no es necesario los for anidados
--------------------------------------------------------------------
   ' Procedimiento para obtener los libros prestados
        For i As Integer = 0 To Me.oDataSet.Tables(0).Rows.Count - 1
            oDataRow0 = Me.oDataSet.Tables(0).Rows(i)
            For j As Integer = 0 To Me.oDataSet.Tables(1).Rows.Count - 1
                oDataRow1 = Me.oDataSet.Tables(1).Rows(j)
                If oDataRow0("Id_libro") = oDataRow1("Id_libro") Then
                    oDataTable = (oDataRow1.Table)
                End If
            Next
        Next
-------------------------------------------------------------------------------------------
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

novalida

Hola!!!
Gracias por tu respuesta. Al final el código quedó de esta manera y funciona como yo quería :)


Me.oDataAdapter = New OleDbDataAdapter("select Libros.Id_libro, Titulo, Autor from libros, prestamos where Libros.Id_libro = Prestamos.Id_libro", Me.oConexion)
        Me.oCommandBuilder = New OleDbCommandBuilder(Me.oDataAdapter)
        Me.oDataSet = New DataSet()


        Me.oConexion.Open()
        Me.oDataAdapter.Fill(Me.oDataSet, "libros")
        Me.oConexion.Close()

        Me.DataGridView1.DataSource = Me.oDataSet.Tables("Libros")


Muchas gracias