运行时错误参数太少预期2

时间:2015-04-04 09:29:03

标签: sql access-vba

我正在尝试从Access查询设计器运行查询,该查询在Access中工作正常,但是当我尝试将语句传递给VBA时,它给出了以下错误消息:

  

运行时错误参数太少。预期2.

我已经在即时窗口中打印了该语句并在Access中运行它并且它正在运行而不需要参数。我做了一些网络搜索,普遍的共识似乎是在VBA中声明它,包括参数 -

Private Sub CmdAppend_Click()
    Dim db1 As Database
    Dim mystr As Recordset2
    Dim UserName As String
    Dim UpdateSQL As String
    Dim SelectIDSQL As String
    Dim checkstr As String

    If Validate_Data = True Then

        UserName = Environ$("Username")

        SelectIDSQL = "Select Distinct ChecklistResults.[StaffID]" _
            & " From ChecklistResults" _
            & " Where (((ChecklistResults.[ClientID])=[Forms]![TeamLeader]![ComClientNotFin])" _
            & " And ((ChecklistResults.[DateofChecklist])=[Forms]![TeamLeader]![ComDateSelect])" _
            & " AND ((ChecklistResults.[ManagerID]) Is Null));"

        Debug.Print SelectIDSQL

        Set db1 = CurrentDb
        Set mystr = db1.OpenRecordset(SelectIDSQL)
        checkstr = mystr!StaffID

        If checkstr <> UserName Then

当我尝试将mystr设置为记录集时,我收到上述错误消息。我想我可以按照下面的格式获取记录集,但有没有办法让上面的SQL语句/赋值工作?

Dim qdf1 As DAO.QueryDef

Set qdf1 = db1.QueryDefs("Get_StaffID")
qdf1.Parameters(0) = [Forms]![TeamLeader]![ComClientNotFin]
qdf1.Parameters(1) = [Forms]![TeamLeader]![ComDateSelect]
Set rst1 = qdf1.OpenRecordset(dbOpenDynaset)

2 个答案:

答案 0 :(得分:0)

当我查看this page时,我看到OpenRecordSet方法接受两个参数的示例。您有一条错误消息,指出有些内容需要2个参数。尝试更改此内容:

Set mystr = db1.OpenRecordset(SelectIDSQL)

到此:

Set mystr = db1.OpenRecordset(SelectIDSQL, dbOpenDynaset)

答案 1 :(得分:0)

感谢您的输入,我使用以下代码来获取我正在寻找的结果。它使用查询SelectClientID来返回完成核对表第一阶段的人员的ID。然后检查已完成第二次检查的人,如果匹配,则返回错误消息。如果两个不同的人完成了它,它使用SQL语句用第二个检查者的ID更新上一个记录 -

Private Sub CmdAppend_Click()
Dim rst1 As Recordset2
Dim db1 As Database
Dim mystr As Recordset2
Dim UserName As String
Dim UpdateSQL As String
Dim SelectIDSQL As String
Dim checkstr As String
Dim qdf1 As DAO.QueryDef

Set db1 = CurrentDb
Set qdf1 = db1.QueryDefs("SelectClientID")
qdf1.Parameters(0) = [Forms]![TeamLeader]![ComClientNotFin]
qdf1.Parameters(1) = [Forms]![TeamLeader]![ComDateSelect]
Set rst1 = qdf1.OpenRecordset(dbOpenDynaset)

If Validate_Data = True Then

    UserName = Environ$("Username")

   UpdateSQL = "UPDATE ChecklistResults" _
    & " SET ChecklistResults.[ManagerID] = '" & UserName & "'" _
    & " WHERE (((ChecklistResults.[ClientID])=[Forms]![TeamLeader]![ComClientNotFin])" _
    & " AND ((ChecklistResults.[DateofChecklist])=[Forms]![TeamLeader]![ComDateSelect])" _
    & " AND ((ChecklistResults.[ManagerID]) Is Null));"


    checkstr = rst1!StaffID
        If checkstr <> UserName Then
        DoCmd.SetWarnings False
        DoCmd.RunSQL UpdateSQL
        DoCmd.SetWarnings True
        DoCmd.Close
        Else
        MsgBox ("This Checklist was created by you and cannot therefore Checked by you")
        End If
Else
Exit Sub
End If
End Sub