Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 搜索函数复制vb.net中的数据_Sql_Vb.net_Visual Studio_Ms Access_Datagridview - Fatal编程技术网

Sql 搜索函数复制vb.net中的数据

Sql 搜索函数复制vb.net中的数据,sql,vb.net,visual-studio,ms-access,datagridview,Sql,Vb.net,Visual Studio,Ms Access,Datagridview,我有一个select查询来搜索access中的数据,但问题是搜索函数会重复每一行(在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 OU

我有一个select查询来搜索access中的数据,但问题是搜索函数会重复每一行(在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()
Dim sql=“从((TBL字段作为B内部连接tblRefMatrice作为B.strMatrice=C.strMatrice上的C)内部连接tblRefMatDetails作为C.intIDref=D.intIDref上的D)左外部连接tblDopages作为A.strMatrice=B.strMatrice上的A,其中”
cmd=新的OleDbCommand(sql、myConnection)
如果CKBrefech.Checked=True,则
sql=sql&“strefech=@Refech和”
如果结束
sql=sql&“strMethode=@Methode和”
sql=sql&“strPurif=@Purif和”
如果CKBmatrice.已选中,则
sql=sql&“A.strMatrice=@Matrice和”
如果结束
sql=sql&“strMolecule=@分子和”
如果CKBechprep.已选中,则
sql=sql&“datDatePrepa>=@DatPrepa和”
如果结束
如果是CKBECHOU,那么
sql=sql&“datDatePrepa@TenMini和”
如果结束
如果CKBteneurmax.Checked=True,则
sql=sql&“dblDopage<@TenMaxi和”
如果结束
如果启用了GroupBox1
尝试
如果勾选了CKBnomref,则
sql=sql&“D.strReferentiel=@NomRef和”
如果结束
如果CKBniv1.已选中,则
sql=sql&“D.strNIveau1=@Niv1和”
如果结束
如果CKBniv2.已选中,则
sql=sql&“D.strNiveau2=@Niv2和”
如果结束
如果CKBniv3.已选中,则
sql=sql&“D.strNiveau3=@Niv3和”
如果结束
如果CKBniv4.已选中,则
sql=sql&“D.strNiveau4=@Niv4和”
如果结束
特例
MessageBox.Show(例如Message)
结束尝试
如果结束
'移除最后一个,如果有….'
如果sql.EndsWith(“AND”),则
sql=sql.Substring(0,sql.Length-4)
如果结束
'如果没有填充文本框,请删除WHERE…'
如果是sql.EndsWith(“WHERE”),那么
sql=sql.Substring(0,sql.Length-7)
如果结束
sql=sql&“按datDatePrepa ASC排序”
cmd.CommandText=sql
cmd.Connection=myConnection
将MyDataSet设置为新数据集
MyDataSet.Clear()
da=新的OleDbDataAdapter(sql、myConnection)
da.SelectCommand=cmd
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Methode”,CBmethode.Text))”将Methode参数添加到数据表中
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Purif”,CBpurif.Text))”将Purif参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Matrice”,CBmatrice.Text))”将矩阵参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@molecular”,CBmol.Text))”将分子参数添加到数据表中
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@DatPrepa”,DTPechprep.Value))”将日期参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@datau”,DTPechprep.Value))'将日期参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Trigprep”,TBtrigprepa.Text))”将Trigprep参数添加到datatable
da.SelectCommand.Parameters.Add(新的OLEDBPParameter(“@Triganaly”,TBtrigAnaly.Text))”将Triganaly参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Tech”,cbappra.Text))'将技术参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Equip”,CBnumappar.Text))”将设备参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@TenMini”,TBteneurmini.Text))”将TenMini参数添加到数据表中
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@TenMaxi”,TBteneurmax.Text))”将TenMaxi参数添加到数据表
da.SelectCommand.Parameters.Add(新的OLEDBPParameter(“@NomRef”,CBnomref.Text))”将TenMaxi参数添加到datatable
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Niv1”,CBniv1.Text))”将Niv1参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Niv2”,CBniv2.Text))”将Niv2参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Niv3”,CBniv3.Text))”将Niv3参数添加到数据表
da.SelectCommand.Parameters.Add(新的OleDbParameter(“@Niv4”,CBniv4.Text))”将Niv4参数添加到数据表
da.Fill(我的数据集,“矩阵”)
DataGridView1.DataSource=无
DataGridView1.DataSource=MyDataSet.Tables(“矩阵”)
'以在填充DGV后集中于第一行DGV
myConnection.Close()

通常问题是表之间的连接

如果未以正确的方式指定关系,则可能会复制行

请注意,您使用了正确的键来连接te表


在您的情况下,据我所见,问题在于详细信息表,表中的每个详细信息都有一行。

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

这个问题很正常,因为我在一个表中复制了数据,所以内部连接对复制数据的反应是正常的。我删除了重复的数据,现在一切都很好。

我确信问题不在于表的连接,因为我进行了相同的查询,没有参数,而且效果很好。所以问题出在参数或数据集中的某个地方。。。顺便说一句,请澄清您的评论@DanieleNo的最后一行不适合我,因为我可能在数据库@Muhammad Irfan AzamIf中有两行相同的行。您可以共享一些示例数据,其中包含您要保留的重复行和您不想保留的重复行,然后为我建议解决方案将很有帮助。问题在于复制每个ro