参数太少预期1,记录集问题

1 ms-access vba

我在从MS Access 2010数据库中创建的查询中运行记录集时遇到问题.这是我要运行的代码:

Private Sub Command192_Click()
Dim recs As String
Dim param As Integer
Dim rs As Recordset

Set rs = CurrentDb.OpenRecordset("UnitRec_Qry", dbOpenDynaset)

With rs
.MoveLast
.MoveFirst

While Not .EOF

recs = recs & vbNewLine & !Spara & " - " & !Rec
.MoveNext

Wend

End With


MsgBox (recs)
End Sub
Run Code Online (Sandbox Code Playgroud)

这应输出的是一个消息框,其中包含列表中查询的多个记录.我这样做,所以我可以将这个和许多其他记录收集到一个文本文件中,以便复制和粘贴到一个单独的系统中.目前,我正在运行此代码,因此我可以将其全部放入字符串变量中.

我的问题是我遇到了可怕的"Too Few参数预期1"错误.

查询工作,我已将其保存到数据库并测试它,我得到了预期的结果.

我尝试用SQL运行记录集:

Set rs = CurrentDb.OpenRecordset("SELECT UnitRecommend_tbl.URecID, UnitRecommend_tbl.Spara," _
& " UnitRecommend_tbl.Rec, UnitRecommend_tbl.SvyID" _
& " FROM UnitRecommend_tbl" _
& " WHERE ((UnitRecommend_tbl.SvyID) = [Forms]![SurveyRegister_frm]![SurveyID])" _
& " ORDER BY UnitRecommend_tbl.Spara;", dbOpenDynaset)
Run Code Online (Sandbox Code Playgroud)

我犯了同样的错误

我再次运行它,但删除了"WHERE"语句,代码运行得很好,但给了我表中的每条记录.不是我想要的.

因此,字段正常,因为数据运行.当我调试文本时,SQL中的参数确实显示为正确的参数,在本例中,数字4是一个整数.

所以我在这里不知所措,我在这里搜索了其他帖子,我尝试了这些可能的解决方案(除非我错过了什么).

我也试过使用dbopensnapshot,仍然没有快乐.想知道我现在是否在使用正确的代码.

任何帮助都会很棒.

干杯

And*_*dre 6

[Forms]![SurveyRegister_frm]![SurveyID]如果在VBA中打开记录集,则不会自动评估类似的参数.

使用此功能:

Public Sub Eval_Params(QD As DAO.QueryDef)

On Error GoTo Eval_Params_Err

    Dim par As DAO.Parameter

    For Each par In QD.Parameters
        ' This is the key line: Eval "evaluates" the form field and gets the value
        par.Value = Eval(par.Name)
    Next par

Eval_Params_Exit:
    On Error Resume Next
    Exit Sub

Eval_Params_Err:
    MsgBox Err.Description, vbExclamation, "Runtime-Error " & Err.Number & " in Eval_Params"
    Resume Eval_Params_Exit

End Sub
Run Code Online (Sandbox Code Playgroud)

使用像这样的QueryDef对象:

Dim QD As QueryDef
Dim RS As Recordset

Set QD = DB.QueryDefs("UnitRec_Qry")
Call EVal_Params(QD)
Set RS = QD.OpenRecordset(dbOpenDynaset)
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过在SQL字符串之外移动参数来在VBA代码中使用SQL运行它:

Set rs = CurrentDb.OpenRecordset("SELECT UnitRecommend_tbl.URecID, UnitRecommend_tbl.Spara," _
& " UnitRecommend_tbl.Rec, UnitRecommend_tbl.SvyID" _
& " FROM UnitRecommend_tbl" _
& " WHERE ((UnitRecommend_tbl.SvyID) = " & [Forms]![SurveyRegister_frm]![SurveyID] & ")" & _
& " ORDER BY UnitRecommend_tbl.Spara;", dbOpenDynaset)
Run Code Online (Sandbox Code Playgroud)