none
cargar datos en tablas relacionadas RRS feed

  • Pregunta

  • Hola gente! la consulta es:

    tengo dos tablas relacionadas, de ellas nace una tercera con la clave primaria de las dos.. lo que no entiendo es como trabajar con las 3 tablas en vb.net..

    ejem:  cargo un cliente

     luego un vehiculo

    y como hago para cargar en la tabla 3 tomando las clave?¡ ese otro tema como tomo la clave primaria de las tablas?¡

    por favor! algun ejemplo! =(

    GRACIAS!

    martes, 12 de noviembre de 2013 4:45

Todas las respuestas

  • hola

    podrias aplicar una tecnica como ser

    n-Layer - SchoolManager - Herencia y navegación de entidades relacionadas (2/2)

    en este caso uso entidades para trabjar los datos y bastante linq que me ayuda a agrupar la informacion y asi definir las relaciones, pudiendo recuperar todo en una sola query

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 12 de noviembre de 2013 9:24
  • leandro! te hago una preg.. yo tengo dos tablas y de la relacion de ellas nace una tercera. Entonces yo cargo los datos en una, y de ella necesito obtener el id (autonumerico), para relacionarla con la segunda tabla. y a la vez uno de sus datos (2da tabla), mas el id (autonumerico), forman parte de la tabla q nace de la relacion.

    necesito, un ejemplo basico de insertar (esto ya lo resolvi), mostrar el ultimo id (autonumerico), este mostrarlo en un textbox, pasarlo a la carga de la 2da tabla, para poder llenar la tercera.

    Base de datos en mysql.

    Soy nueva en .net =(

    Muchas gracias por tu ayuda!


    • Editado Noelia_ martes, 19 de noviembre de 2013 18:44
    martes, 19 de noviembre de 2013 18:32
  • Hola:
    Si se ejecuta el siguiente script, te crea 3 tablas.
    Es ena relacion M->N entre la tabla PERFIL y la tabla MENU

    CREATE TABLE [PERFIL] (
     [ID_PERFIL] [tinyint] NOT NULL ,
     [DESCRIPCION] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
     CONSTRAINT [PK_PERFIL] PRIMARY KEY CLUSTERED
    (
     [ID_PERFIL]
    ) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

    CREATE TABLE [MENU] (
     [ID_MENU] [tinyint] NOT NULL ,
     [DESCRIPCION] [varchar] (50) COLLATE Modern_Spanish_CI_AS NOT NULL ,
     CONSTRAINT [PK_MENU] PRIMARY KEY CLUSTERED
    (
     [ID_MENU]
    ) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

    CREATE TABLE [PERFIL_MENU] (
     [PERFIL] [tinyint] NOT NULL ,
     [MENU] [tinyint] NOT NULL ,
     CONSTRAINT [PK_PERFIL_MENU] PRIMARY KEY  CLUSTERED
     (
      [PERFIL],
      [MENU]
     )  ON [PRIMARY] ,
     CONSTRAINT [FK_PERFIL_MENU_MENU] FOREIGN KEY
     (
      [MENU]
     ) REFERENCES [MENU] (
      [ID_MENU]
     ),
     CONSTRAINT [FK_PERFIL_MENU_PERFIL] FOREIGN KEY
     (
      [PERFIL]
     ) REFERENCES [PERFIL] (
      [ID_PERFIL]
     )
    ) ON [PRIMARY]

    En tu proyecto tienes que tener 1 Form para mantener la tabla PERFIL y 1 Form para mantener la tabla MENU
    El ejemplo que te pongo es para mantener la tabla PERFIL_MENU
    Este Form tiene 2 ComboBox (cboPerfil y cboMenu) y 1 Button (btnInsertar), copia y pega el siguiente codigo.

    Option Strict On
    Option Explicit On
    Imports System.Data.SqlClient

    Public Class Form1
        Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=TU_BASE_DE_DATOS;Integrated Security=True"

        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            'Se cargan los 2 ComboBox
            Dim lsQuery As String = "Select ID_PERFIL, DESCRIPCION From PERFIL Order By DESCRIPCION"
            lP_CargaCombo(Me.cboPerfil, lsQuery, "DESCRIPCION", "ID_PERFIL")
            lsQuery = "Select ID_MENU, DESCRIPCION From MENU Order By DESCRIPCION"
            lP_CargaCombo(Me.cboMenu, lsQuery, "DESCRIPCION", "ID_MENU")
        End Sub

        Private Sub btnInsertar_Click(sender As System.Object, e As System.EventArgs) Handles btnInsertar.Click
            Try
                Dim lsQuery As String = "Insert Into PERFIL_MENU (PERFIL, MENU) values (@Perfil, @Menu)"
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear comando
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        'añadir parametros al comando
                        loComando.Parameters.Add(New SqlParameter("@Perfil", Me.cboPerfil.SelectedValue))
                        loComando.Parameters.Add(New SqlParameter("@Menu", Me.cboMenu.SelectedValue))
                        loConexion.Open()   ' abrir conexión
                        loComando.ExecuteNonQuery()
                    End Using
                End Using
            Catch Exp As SqlException
                MessageBox.Show(Exp.Message, "btnInsertar_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "btnInsertar_Click", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

        Private Sub lP_CargaCombo(ByRef cboComboBox As ComboBox, ByVal vsQuery As String, ByVal vsVisualiza As String, ByVal vsValor As String)
            Try
                Dim loDataTable As New DataTable
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim loDataAdapter As New SqlDataAdapter(vsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                End Using
                If loDataTable.Rows.Count > 0 Then
                    'Creamos un nuevo registro para el elemento en blanco
                    Dim loFila As DataRow = loDataTable.NewRow()
                    loFila.Item(vsValor) = 0
                    loFila.Item(vsVisualiza) = ""
                    ' Insertamos la nueva fila en la primera posición del objeto DataTable.
                    loDataTable.Rows.InsertAt(loFila, 0)
                End If
                With cboComboBox
                    .DataSource = loDataTable
                    .DisplayMember = vsVisualiza
                    .ValueMember = vsValor
                    .SelectedIndex = -1
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lP_CargaCombo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    End Class

    P.D.
    El ejemplo esta hecho para SqlServer, asi que tendras que cambiarlo para mysql

    Un saludo desde Bilbo
    Carlos

    miércoles, 20 de noviembre de 2013 9:20