如果然后在两个单独的记录集上

时间:2013-05-26 12:35:29

标签: vba ms-access if-statement ms-access-2010

我需要在2个独立的记录集上测试2种不同的条件。我对VBA不好,我有一个非常基本的代码,我只需要帮助If Then语法。这是我的代码:

Private Sub SaveRecord_Click()

    '****  add a new record  ****
    Dim db As Database, rs1 As Recordset, rs2 As Recordset

    Set db = CurrentDb
    Set rs1 = db.OpenRecordset("ExpAsset", DB_OPEN_DYNASET)
    Set rs2 = db.OpenRecordset("LogTest", DB_OPEN_DYNASET)

'****  Following code is updating the tables in the ExpAsset table with new information     from the form****
If rs1.NoMatch Then
        rs1.AddNew
        rs1("User") = Me!Location
        rs1("Type") = Me!Type
        rs1("Model") = Me!MODEL
        rs1("Asset_ID") = Me!Asset_ID
        rs1("Serial_Number") = Me!Serial
        rs1.Update
Else
        MsgBox "Serial Number: " & Me!Serial & " already exists.", 48, "ERROR!"
        Me!Serial.SetFocus

End If
'****  Following code is creating a log in Logtest table with information provided in the form****
If rs2.NoMatch Then
        rs2.AddNew
        rs2("Asset_Type") = Me!Type
        rs2("Transfer_Type") = "New purchase"
        rs2("Description") = Me!DESCRIPTION
        rs2("DELIVERED_TO") = Me!Location
        rs2("DELIVERED_BY") = Me!DeliveredBy
        rs2("RECEIVED_BY") = Me!Receiver
        rs2("RECEIVED_DATE") = Me!Date
        rs2.Update

        MsgBox "Part information has been updated in the database!"

        'clear the controls to add more customers
        Call ClearControls
Else
        MsgBox "Asset ID: " & Me!Asset_ID & " already exists.", 48, "ERROR!"
        Me!Asset_ID.SetFocus
End If

    rs1.Close
    rs2.Close
    db.Close

End Sub

我知道If Then Else语法不正确,我需要检查两个条件,序列号。和资产ID。

2 个答案:

答案 0 :(得分:1)

查看 Recordset.NoMatch Property 的Access联机帮助主题:

指示是否使用搜索方法或其中一种查找方法(仅限Microsoft Access工作区)找到特定记录。 < / p>

但是在您的代码中,您打开了一个记录集,但没有使用搜索或查找。在这种情况下,您没有要求匹配任何内容,因此.NoMatch每次都会False。逻辑与此类似......

If rs1.NoMatch Then
    ' this code will never run
Else
    ' this code runs every time
End If

您可以使用DCount来确定ExpAsset是否包含给定的Asset_ID值。

DCount("*", "ExpAsset", "Asset_ID = " & Me!Asset_ID) ' if Asset_ID is numeric
DCount("*", "ExpAsset", "Asset_ID = '" & Me!Asset_ID & "'") ' if Asset_ID is text

一旦有了DCount表达式,就可以使用这样的逻辑......

If DCount("*", "ExpAsset", "Asset_ID = " & Me!Asset_ID) = 0 Then
    ' Asset_ID not present in table -> add it
Else
    ' inform user Asset_ID already present in table
End If

答案 1 :(得分:1)

你是对的HansUp,我的代码很傻,我在发布之后意识到没有可以测试的标准。以下是正确的代码,我对其进行了测试并且有效:)

Private Sub SaveRecord_Click()


    '****  add a new record  ****
    Dim db As Database, rs1 As Recordset, rs2 As Recordset, Criteria As String, Criteria2 As String

    Set db = CurrentDb
    Set rs1 = db.OpenRecordset("ExpAsset", DB_OPEN_DYNASET)
    Set rs2 = db.OpenRecordset("LogTest", DB_OPEN_DYNASET)

    Criteria = "[serial_number]='" & Me!Serial & "'"
    Criteria2 = "[Asset_ID]='" & Me!Asset_ID & "'"
'****  Following code is updating the tables in the ExpAsset table with new information from the form****
rs1.FindFirst Criteria
If rs1.NoMatch Then
    rs1.FindFirst Criteria2
    If rs1.NoMatch Then
        rs1.AddNew
        rs1("User") = Me!Location
        rs1("Type") = Me!Type
        rs1("Model") = Me!MODEL
        rs1("Asset_ID") = Me!Asset_ID
        rs1("Serial_Number") = Me!Serial
        rs1.Update

'****  Following code is creating a log in Logtest table with information provided in the form****
     rs2.AddNew
        rs2("Asset_Type") = Me!Type
        rs2("Transfer_Type") = "New purchase"
        rs2("Description") = Me!DESCRIPTION
        rs2("DELIVERED_TO") = Me!Location
        rs2("DELIVERED_BY") = Me!DeliveredBy
        rs2("RECEIVED_BY") = Me!Receiver
        rs2("RECEIVED_DATE") = Me!Date
        rs2.Update

        MsgBox "Part information has been updated in the database!"
    'clear the controls to add more customers
        Call ClearControls

    Else
        MsgBox "Asset_ID: " & Me!Asset_ID & " already exists.", 48, "ERROR!"
        Me!Asset_ID.SetFocus
    End If
Else
        MsgBox "Serial Number: " & Me!Serial & " already exists.", 48, "ERROR!"
        Me!Serial.SetFocus

End If

    rs1.Close
    rs2.Close
    db.Close


End Sub