【问题标题】:Avoid Duplicates on Database- Vb.net避免数据库上的重复 - Vb.net
【发布时间】:2019-07-20 01:15:13
【问题描述】:

我在 vb.net 上编程,使用 ms-access 和 ADODB 记录集。我想我很难解释,我希望你们能理解我的问题。 我想避免数据库中的重复值,当要重复时,它不会添加任何东西。我有两个datagradeview。一个包含我在访问表中的所有组,我们称之为 gridAllGroup。另一个datagradeview只有问题中的组,这个称为gridGroup。我有一个按钮,它将把选定的组从 gridAllGroup 传递到 gridGroup。 实际上它是3个网格。 首先是问卷,然后所选问卷将使用来自该问卷的组填充 gridGroups。

我试图从 ID Questionary 和 ID Group 中获取值,然后比较表中是否已经存在..但我认为我这样做是错误的。

这是将传递所选组的按钮

s = "Select * from rrQuestionaryGroup where ID_Questionary = " & Val(Trim(lblIDQuestionary.Text)) & " and ID_Group = " & Val(Trim(lblIDGroup.Text)) & ""

        retval = getRS(s, rs, False, serror)

        If retval Then
            MsgBox("Group already in this questionary")
        Else
            rs.AddNew()
            rs.Fields("ID_Questionary").Value = lblIDHoldQuestionary.Text
            rs.Fields("ID_Group").Value = lblIDHoldGroup.Text
            rs.Fields("Order").Value = lblIDHoldOrder.Text
            rs.Update()
            rs.Close()
        End If
Public Function getRS(ByVal sql As String, rs As ADODB.Recordset, ByVal RO As Boolean, ByRef sErro As String) As Boolean
        Dim Con As New ADODB.Connection

        On Error Resume Next
        Con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users.mdb;Persist Security Info=true")
        Con.CursorLocation = ADODB.CursorLocationEnum.adUseClient

        rs.Open(sql, Con, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
        If Err.Number = 0 Then
            Return True
        Else

            sErro = Err.Description
            Return False

        End If
        On Error GoTo 0


    End Function

我希望这是足够的信息来理解。在此先感谢,如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 您需要发布更多代码,尤其是 getRS() 函数。
  • @RobertBaron 好的....那个只是为了连接
  • 为什么选择 ADODB? ADO.net 已经存在了很长一段时间了。

标签: vb.net ms-access duplicates


【解决方案1】:

如果GetRS() 函数成功打开Recordset,则返回True,但这并不能告诉我们Recordset 是否包含记录。为此,您必须使用RecordsetRecordCount 属性。像这样。

If retval Then
    If rs.RecordCount > 0 Then
        MsgBox("Group already in this questionary")
    Else
        rs.AddNew()
        rs.Fields("ID_Questionary").Value = lblIDHoldQuestionary.Text
        rs.Fields("ID_Group").Value = lblIDHoldGroup.Text
        rs.Fields("Order").Value = lblIDHoldOrder.Text
        rs.Update()
        rs.Close()
    End If
Else
    MsgBox("Error while opening Recordset.")
End If

【讨论】:

  • 哦..它工作了谢谢...只是一个问题,为什么我们把记录数> 0?
  • @Sam1996 - 如果recordset 包含记录(实际上是1),那么这意味着该组已经存在于数据库中。如果它不存在,那么就会有 0 条记录。
猜你喜欢
  • 1970-01-01
  • 2017-07-10
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
相关资源
最近更新 更多