2015-12-04 45 views
0

enter image description here搜索功能複製數據vb.net

我有一個選擇查詢,以便從訪問搜索數據,但問題是,搜索功能複製每一行(顯示在同一行2次DGV)。任何人都可以提前指導我解決問題。

Dim sql = "SELECT A.* FROM ((tblMatrice AS B INNER JOIN tblRefMatrice AS C ON B.strMatrice = C.strMatrice) INNER JOIN tblRefMatDetails AS D ON C.intIDref = D.intIDRef) LEFT OUTER JOIN tblDopages AS A on A.strMatrice = B.strMatrice where " 

    cmd = New OleDbCommand(sql, myConnection) 

    If CKBrefech.Checked = True Then 
     sql = sql & "strRefEch = @Refech AND " 
    End If 

    sql = sql & "strMethode = @Methode AND " 

    sql = sql & "strPurif = @Purif AND " 


    If CKBmatrice.Checked Then 
     sql = sql & "A.strMatrice = @Matrice AND " 
    End If 

    sql = sql & "strMolecule = @Molecule AND " 

    If CKBechprep.Checked Then 
     sql = sql & "datDatePrepa >= @DatPrepa AND " 
    End If 
    If CKBechau.Checked Then 
     sql = sql & "datDatePrepa <= @Datau AND " 
    End If 
    If CKBtrigprepa.Checked = True Then 
     sql = sql & "strTrigPrepa = @Trigprep AND " 
    End If 
    If CKBtriganaly.Checked = True Then 
     sql = sql & "strTrigAnaly = @Triganaly AND " 
    End If 
    If CKBappar.Checked = True Then 
     sql = sql & "strNomTech = @Tech AND " 
    End If 
    If CKBnumappar.Checked = True Then 
     sql = sql & "[strEquip(Appareil)] = @Equip AND " 
    End If 
    If CKBteneurmini.Checked = True Then 
     sql = sql & "dblDopage > @TenMini AND " 
    End If 
    If CKBteneurmax.Checked = True Then 
     sql = sql & "dblDopage < @TenMaxi AND " 
    End If 

    If GroupBox1.Enabled Then 
     Try 
      If CKBnomref.Checked Then 
       sql = sql & "D.strReferentiel = @NomRef AND " 
      End If 
      If CKBniv1.Checked Then 
       sql = sql & "D.strNIveau1 = @Niv1 AND " 
      End If 
      If CKBniv2.Checked Then 
       sql = sql & "D.strNiveau2 = @Niv2 AND " 
      End If 
      If CKBniv3.Checked Then 
       sql = sql & "D.strNiveau3 = @Niv3 AND " 
      End If 
      If CKBniv4.Checked Then 
       sql = sql & "D.strNiveau4 = @Niv4 AND " 
      End If 
     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
     End Try 
    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 

    sql = sql & " ORDER BY datDatePrepa ASC " 


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


    da.SelectCommand.Parameters.Add(New OleDbParameter("@Methode", CBmethode.Text))   'adding Methode parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Purif", CBpurif.Text))    'adding Purif parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Matrice", CBmatrice.Text))   'adding Matrice parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Molecule", CBmol.Text))   'adding Molecule parameters to datatable 
    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("@Trigprep", TBtrigprepa.Text))  'adding Trigprep parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Triganaly", TBtrigAnaly.Text))  'adding Triganaly parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Tech", CBappar.Text))    'adding Tech parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Equip", CBnumappar.Text))   'adding Equip parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@TenMini", TBteneurmini.Text))  'adding TenMini parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@TenMaxi", TBteneurmax.Text))  'adding TenMaxi parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@NomRef", CBnomref.Text))   'adding TenMaxi parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Niv1", CBniv1.Text))    'adding Niv1 parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Niv2", CBniv2.Text))    'adding Niv2 parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Niv3", CBniv3.Text))    'adding Niv3 parameters to datatable 
    da.SelectCommand.Parameters.Add(New OleDbParameter("@Niv4", CBniv4.Text))    'adding Niv4 parameters to datatable 

    da.Fill(MyDataSet, "Matrice") 

    DataGridView1.DataSource = Nothing 
    DataGridView1.DataSource = MyDataSet.Tables("Matrice") 
    'to focus on first row of DGV after populating it 

    myConnection.Close() 

回答

1

通常問題在於表之間的連接。

如果未以正確方式指定關係,則可能會重複行。

看你使用正確的鍵來加入te表。

在你的情況下,對於我所看到的,問題是細節表,你將有一個表中的每個細節。

+0

我敢肯定問題不在於表的連接,因爲我在沒有參數的情況下做了相同的查詢,並且它工作得很好。所以問題是在參數或數據集... btw請澄清您的評論的最後一行@Daniele – Marwan

0

確保您的查詢返回唯一行。嘗試添加不同的關鍵字。

+0

沒有,這不適合我,因爲我可能在數據庫中有兩次相同的行@Muhammad Irfan Azam – Marwan

+0

如果你可以共享一些你想要保留的重複行的示例數據,以及你不想保留的行,那麼建議一個解決方案會有幫助 –

+0

對我來說問題在於它會複製搜索結果的每一行,就像結果一樣包含50行,它將顯示100行,所以問題是查詢顯示每行重複@Muhammad Irfan Azam – Marwan

-1

那麼問題是如此的正常,因爲我有一個表中的數據重複,所以內部聯接的反應是正常的重複數據。我刪除了重複的數據,現在每件事情都運行良好。