Propojení 3 tabulek na formuláři
Řešení pomocí SQL
 Tisk

Řešení pomocí SQL

Druhou variantou řešení je použít standardní jazyk SQL. Tuto variantu si ukážeme nyní. Ukázkový příklad je možné stáhnout zde .


Formulář

Použité objekty je možné vidět na obr. .

Programový kód

Programový kód je vidět na obr. .

Celý programový kód je následující:

Public Class frm3TabulkySQL

    Dim tabulka As DataTable

    Dim dsVyrobkyJoin As New DataSet("VyrobkyJoin")

    Dim dtVyrobkyJoin As New DataTable


    Private Sub TblZakaznikBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgs) Handles TblZakaznikBindingNavigatorSaveItem.Click

        Me.Validate()

        Me.TblZakaznikBindingSource.EndEdit()

        Me.TableAdapterManager.UpdateAll(Me.DsVzor)


    End Sub


    Private Sub frm3TabulkySQL_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        'TODO: This line of code loads data into the 'DsVzor.tblZakaznik' table. You can move, or remove it, as needed.

        Me.TblZakaznikTableAdapter.Fill(Me.DsVzor.tblZakaznik)


    End Sub


    Private Sub TblZakaznikBindingSource_PositionChanged(sender As Object, e As System.EventArgs) Handles TblZakaznikBindingSource.PositionChanged

        NactiDotaz()

        dgvVyrobky.DataSource = dtVyrobkyJoin

        'zobrazeni nazvu sloupecku

        dgvVyrobky.Columns(0).HeaderText = "Číslo výrobku"

        dgvVyrobky.Columns(1).HeaderText = "Název výrobku"

        dgvVyrobky.Columns(2).HeaderText = "Název zákazníka"

    End Sub


    Private Sub NactiDotaz()

        Dim dbConn As New OleDb.OleDbConnection(TblZakaznikTableAdapter.Connection.ConnectionString)


        ' Create a data adapter to retrieve records from db

        Dim strSELECT As String

        strSELECT = "SELECT tblVyrobek.Cislo_vyrobku, tblVyrobek.Nazev_vyrobku, tblVyrobek.Stav_vyrobku, tblVyrobek.Koment " & _

            "FROM tblVyrobek INNER JOIN tblPropojovaciZ_V ON tblVyrobek.Cislo_vyrobku = tblPropojovaciZ_V.Cislo_vyrobku " & _

            "WHERE (((tblPropojovaciZ_V.Identifikacni_cislo_zakaznika)='" & TblZakaznikBindingSource.Current("Identifikacni_cislo_zakaznika") & "'))"


        dsVyrobkyJoin.Clear()

        Dim daVyrobkyJoin As New OleDb.OleDbDataAdapter(strSELECT, dbConn)


        ' Fill the dataset

        daVyrobkyJoin.Fill(dsVyrobkyJoin)

        dtVyrobkyJoin = dsVyrobkyJoin.Tables(0)   'nactena tabulka z dotazu


        dbConn.Close()

        dbConn.Dispose()

    End Sub


End Class


Nejdůležitější části kódu:


V proceduře TblZakaznikBindingSource_PositionChanged je procedura obsahující SQL dotaz pro propojení 3 tabulek.

šipka Použitý dotaz

strSELECT = "SELECT tblVyrobek.Cislo_vyrobku, tblVyrobek.Nazev_vyrobku, tblVyrobek.Stav_vyrobku, tblVyrobek.Koment " & _

            "FROM tblVyrobek INNER JOIN tblPropojovaciZ_V ON tblVyrobek.Cislo_vyrobku = tblPropojovaciZ_V.Cislo_vyrobku " & _

            "WHERE (((tblPropojovaciZ_V.Identifikacni_cislo_zakaznika)='" & TblZakaznikBindingSource.Current("Identifikacni_cislo_zakaznika") & "'))"