Examinar Tabla con Claves Foráneas

Tabla Productos (Products), Proveedores (Suppliers) y Categorias (Categories) - Base de datos Northwind

Fecha: 25/Jul/2005 (22 de Julio de 2005)
Autor: Ing. Fernando Luque Sánchez  --  DCE  4  Estrellas

fls2307@hotmail.com


Sres. Desarrolladores, este  aporte es util para saber como mostrar la información de una Tabla cuando esta tiene, en alguno de sus campos datos de otras tablas (Claves Foraneas - Foreing Keys).

Sabemos que al desarrollar una aplicación todas las tablas se encuentran relacionadas, aquellos atributos que son claves foráneas deben tener en cuenta los datos de otra tabla (vaya si digo lo mismo), para el aporte que comparto con ustedes, los datos del Proveedor y la Categoría en la tabla Productos son claves foráneas.

EL EJEMPLO

Para el ejemplo presento un formulario similar al siguiente:

Los datos del Proveedor y la Categoría se muestran en controles ComboBox. Para la lista completa de los Productos se ha utilizado un ListView. En otro aporte enviaré como se trabajan con los datos.

A continuación sigue código en Visual Basic:

Private Sub CargarForm(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        'Conexión

        Dim cn As New SqlConnection("workstation id=HOME;packet size=4096;user id=fernando;integrated security=SSPI;data source=(local);persist security info=False;initial catalog=Northwind")

        'Adaptadores
        Dim daProductos As New SqlDataAdapter("Select * from Products", cn)
        Dim daProveedores As New SqlDataAdapter("Select SupplierId,CompanyName from Suppliers order by SupplierId", cn)
        Dim daCategorias As New SqlDataAdapter("Select * from Categories", cn)

        'Instancia del DataSet
        dsDatos = New DataSet

        'Llenar el DataSet
        daProductos.Fill(dsDatos, "Productos")
        daProveedores.Fill(dsDatos, "Proveedores")
        daCategorias.Fill(dsDatos, "Categorias")

        'Llenar ListView
        For i = 0 To dsDatos.Tables("Productos").Rows.Count - 1
            lvProductos.Items.Add(dsDatos.Tables("Productos").Rows(i)("ProductID"))
            lvProductos.Items(i).SubItems.Add(dsDatos.Tables("Productos").Rows(i)("ProductName"))
            lvProductos.Items(i).SubItems.Add(dsDatos.Tables("Productos").Rows(i)("UnitsInStock"))
            lvProductos.Items(i).SubItems.Add(dsDatos.Tables("Productos").Rows(i)("UnitPrice"))
            lvProductos.Items(i).SubItems.Add(dsDatos.Tables("Productos").Rows(i)("UnitsOnOrder"))
        Next

        'Origenes de los combos
        cboProveedor.DataSource = dsDatos.Tables("Proveedores")
        cboProveedor.DisplayMember = dsDatos.Tables("Proveedores").Columns("CompanyName").ToString
        cboProveedor.ValueMember = dsDatos.Tables("Proveedores").Columns("SupplierID").ToString
        ProveedorActivar()

        cboCategorias.DataSource = dsDatos.Tables("Categorias")
        cboCategorias.DisplayMember = dsDatos.Tables("Categorias").Columns("CategoryName").ToString
        cboCategorias.ValueMember = dsDatos.Tables("Categorias").Columns("CategoryID").ToString
        CategoriaActivar()

        'Llenar las Cajas de texto y el CheckBox
        LlenarRegistro()

    End Sub

Para llenar el Registro con los campos de la misma tabla Products

    Private Sub LlenarRegistro()

        txtProductID.Text = dsDatos.Tables("Productos").Rows(vposicion)("ProductID")

        txtProductName.Text = dsDatos.Tables("Productos").Rows(vposicion)("ProductName")

        txtUnitsInStock.Text = dsDatos.Tables("Productos").Rows(vposicion)("UnitsInStock")

        txtUnitPrice.Text = dsDatos.Tables("Productos").Rows(vposicion)("UnitPrice")

        txtReorderLevel.Text = dsDatos.Tables("Productos").Rows(vposicion)("ReorderLevel")

        txtUnitsOnOrder.Text = dsDatos.Tables("Productos").Rows(vposicion)("UnitsOnOrder")

        txtQuantityPerUnit.Text = dsDatos.Tables("Productos").Rows(vposicion)("QuantityPerUnit")

        chkDiscontinued.Checked = CType(dsDatos.Tables("Productos").Rows(vposicion)("Discontinued"), Boolean)

    End Sub


 En el ejemplo se ha trabajado con un DataSet no Tipificado, para más información de Tipos de DataSets pueden visitar:

http://www.elguille.info/colabora/NET2005/FernandoLuque_DataSetsI.htm 

http://www.elguille.info/colabora/NET2005/FernandoLuque_DataSetsII.htm

Para el control ListView tienen:

http://www.elguille.info/colabora/NET2005/FernandoLuque_Control_ListView.htm

http://www.elguille.info/colabora/NET2005/FernandoLuque_Control_ListViewII.htm

http://www.elguille.info/colabora/NET2005/FernandoLuque_ListViewAvanzado.htm

 

El código completo del aporte se encuentra al final del artículo, solo recuerda que tienes que actualizar la cadena de conexión y listo. Cualquier consulta a mi correo que aparece al inicio del artículo. Muchas suerte a todos y...A SEGUIR DESARROLLANDO..

Ing. Fernando Luque Sánchez
CIP 61806
Desde Trujillo - Perú para el mundo


Espacios de nombres usados en el código de este artículo:

System.Data
System.Data.SQLClient


Fichero con el código de ejemplo: FernandoLuque_ExaminarTabla01.zip - Tamaño  9  KB


ir al índice