搜索功能复制数据vb.net

时间:2015-12-04 10:33:32

标签: sql vb.net visual-studio ms-access datagridview

enter image description here

我有一个选择查询来从访问中搜索数据,但问题是搜索功能重复每一行(在DGV中显示相同的行2次)。任何人都可以提前指导我解决这个问题。

    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()

3 个答案:

答案 0 :(得分:1)

通常问题是表之间的连接。

如果没有以正确的方式指定关系,则可以复制行。

看看你使用正确的键来加入te table。

在您的情况下,对于我能看到的问题,问题是详细信息表,表格中的每个细节都有一行。

答案 1 :(得分:0)

确保您的查询返回唯一行。尝试添加一个不同的关键字。

答案 2 :(得分:-1)

问题是如此正常,因为我在表中有重复的数据,因此内部连接的反应与重复数据是正常的。我删除了重复的数据,现在每件事情都很好。