在Access vb.net中搜索多个表

时间:2015-10-27 13:50:19

标签: sql database vb.net visual-studio-2013 ms-access-2010

我有一个搜索按钮,只在tblDopage中查找数据,但此表中有一个字段strMatrice链接到表tblMatrice。因此,如果用户正在搜索Matrice,我应该从tblMatrice中检索Matrice并使用strMatrice上的tblDopage进行内部连接,这就像搜索内部的搜索一样,搜索matrice的结果超过1个结果,因此我有很多结果我应该链接用tblDopage显示最终结果。我该怎么做,我花了3天的时间寻找解决方案。

我从tblMatrice检索了strMatrice并用结果填充了一个数据集,但我不知道如何在数据集和数据库中的表之间进行内连接,这是tblDopage

非常感谢帮助,提前谢谢

provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
    dataFile = "C:\Users\Marwan_Albanna\Desktop\Autocontrol.accdb"
    connString = provider & dataFile

    myConnection.ConnectionString = connString
    myConnection.Open() 
  Dim sql = "SELECT * from tblDopages WHERE "

    cmd = New OleDbCommand(Sql, myConnection)
    Dim da As OleDbDataAdapter

    If CKBrefech.Checked = True Then
        sql = sql & "strRefEch = '" & TBrefech.Text & "'  AND "
    End If
    If CKBmethode.Checked = True Then
        sql = sql & "strMethode = '" & CBmethode.Text & "' AND "
    End If
    If CKBpurif.Checked Then
        sql = sql & "strPurif = '" & CBpurif.Text & "' AND "
    End If
    If CKBmatrice.Checked Then
        sql = sql & "strMatrice = '" & CBmatrice.Text & "' AND "
    End If
    If CKBmol.Checked Then
        sql = sql & "strMolecule = '" & CBmol.Text & "' AND "
    End If
    If CKBechprep.Checked Then
        sql = sql & "datDatePrepa >= @DatPrepa AND "
        cmd.Parameters.Add("@DatPrepa", OleDbType.Date).Value = DTPechprep.Value.Date
    End If
    If CKBechau.Checked Then
        sql = sql & "datDatePrepa <= @Datau AND "
        cmd.Parameters.Add("@Datau", OleDbType.Date).Value = DTPechau.Value.Date
    End If
    If CKBtrigprepa.Checked = True Then
        sql = sql & "strTrigPrepa = '" & TBtrigprepa.Text & "' AND "
    End If
    If CKBtriganaly.Checked = True Then
        sql = sql & "strTrigAnaly = '" & TBtrigAnaly.Text & "' AND "
    End If
    If CKBappar.Checked = True Then
        sql = sql & "strNomTech = '" & CBappar.Text & "' AND "
    End If
    If CKBnumappar.Checked = True Then
        sql = sql & "[strEquip(Appareil)] = '" & CBnumappar.Text & "' AND "
    End If
    If CKBteneurmini.Checked = True Then
        sql = sql & "dblDopage >= " & TBteneurmini.Text & " AND "
    End If
    If CKBteneurmax.Checked = True Then
        sql = sql & "dblDopage <= " & TBteneurmax.Text & " AND "
    End If


    'if referentiel is enabled
    myConnection.Close()
    If CKBnomref.Checked Then

        provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
        dataFile = "C:\Users\Marwan_Albanna\Desktop\Autocontrol.accdb"
        connString = provider & dataFile

        myConnection.ConnectionString = connString
        myConnection.Open()

        'Get IDref from table tblRefMatDetails and then make an innerjoin with tblRefMatrice to retrieve the matrice and insert it into the search query of tblDopages
        Dim query = "select distinct a.strMatrice from tblRefMatrice a INNER JOIN tblRefMatDetails b on a.intIDref=b.intIDRef where "
        cmd = New OleDbCommand(query, myConnection)

        Try
            If CKBnomref.Checked Then
                query = query & "b.strReferentiel = '" & CBnomref.Text & "' AND "
            End If
            If CKBniv1.Checked Then
                query = query & "b.strNIveau1 = '" & CBniv1.Text & "' AND "
            End If
            If CKBniv2.Checked Then
                query = query & "b.strNiveau2 = '" & CBniv2.Text & "' AND "
            End If
            If CKBniv3.Checked Then
                query = query & "b.strNiveau3 = '" & CBniv3.Text & "' AND "
            End If
            If CKBniv4.Checked Then
                query = query & "b.strNiveau4 = '" & CBniv4.Text & "' AND "
            End If
            ' Remove the last AND if any ....'
            If query.EndsWith(" AND ") Then
                query = query.Substring(0, query.Length - 4)
            End If
            ' Remove the WHERE if no textbox has been filled....'
            If query.EndsWith(" WHERE ") Then
                query = query.Substring(0, query.Length - 7)
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        cmd.CommandText = query
        cmd.Connection = myConnection
        Dim MyDataTable As New DataTable
        Dim da As New OleDbDataAdapter(query, myConnection)

        da.Fill(MyDataTable)

        Dim row As DataRow
        For Each row In MyDataTable.Rows
            Dim strMatrice As String
            strMatrice = row("strMatrice")
        Next row

        DataGridView2.DataSource = MyDataTable

        'to focus on first row of DGV after populating it 
        DataGridView2.Rows(0).Selected = True

        myConnection.Close()

        Dim matrice As String
        For x As Integer = 0 To DataGridView2.Rows.Count - 2
            matrice = DataGridView2.Rows(x).Cells(0).Value

            sql = sql & " strMatrice = '" & matrice.ToString & "' AND "

            Dim row As DataRow
            For Each row As DataRow In MyDataTable.Rows
                matrice = row.Item("Detail")
            Next row

  Next
    End If

    ' Remove the last AND if any ....'
    If sql.EndsWith(" AND ") Then
        sql = sql.Substring(0, sql.Length - 4)
    End If
    ' Remove the WHERE if no textbox has been filled....'
    If sql.EndsWith(" WHERE ") Then
        sql = sql.Substring(0, sql.Length - 7)
    End If

    ' cmd = New OleDbCommand(sql, myConnection)
    cmd.CommandText = sql
    cmd.Connection = myConnection
    Dim MyDataSet As New DataSet
    da = New OleDbDataAdapter(sql, myConnection)
    da.SelectCommand = cmd

    da.SelectCommand.Parameters.Add(New OleDbParameter("@DatPrepa", DTPechprep.Value))  'adding date parameters to datatable
    da.SelectCommand.Parameters.Add(New OleDbParameter("@datau", DTPechprep.Value))     'adding date parameters to datatable
    'da.SelectCommand.Parameters.Add(New OleDbParameter("@Matrice", matrice.ToString))     'adding Matrice parameters to datatable

    da.Fill(MyDataSet, "Matrice")
    DataGridView1.DataSource = MyDataSet.Tables("Matrice")

    'to focus on first row of DGV after populating it 
    DataGridView1.Rows(0).Selected = True

    LBnumresult.Text = DataGridView1.RowCount - 1

0 个答案:

没有答案