我有一个名为Test_Table的表,例如
ID Code
----- -------
1 A
2 B
3 C
我创建了一个名为 TestForm 的简单表单,以动态检索表中的记录。有问题的表单元素是一个文本框,名为TextBox2
我创建了以下查询并将其命名为 TestQuery ,以使用TextBox2中用户输入的值从Test_Table中检索记录:
SELECT *
FROM TestTable
WHERE (((TestTable.Code)=Forms![TestForm]![TextBox2]));
当我手动执行它时,查询工作正常。
我创建了以下子过程来检索记录集中的查询结果,例如 -
Sub Retrieve()
Dim db As Database
Set db = CurrentDb
Dim rst As Recordset
Set rst = db.OpenRecordset("TestQuery") 'Shows run-time error on this step
MsgBox (rst!ID)
End Sub
但是当我尝试运行这个子程序时,我收到错误声明' 运行时错误3061 - 参数太少。期待1 '。
我在这里遗漏了什么吗?或者有更好的方法吗?
答案 0 :(得分:1)
当您从查询设计器运行查询时,Access可以评估Forms![TestForm]![TextBox2]
并从该文本框中检索值。
但是,使用OpenRecordset()
打开查询时不会发生这种情况。在这种情况下,Forms![TestForm]![TextBox2]
被视为与任何其他参数一样......因此您必须单独提供其值...
Sub Retrieve()
Dim db As Database
Dim qdf As QueryDef
Dim rst As Recordset
Set db = CurrentDb
Set qdf = db.QueryDefs("TestQuery")
qdf.Parameters(0).Value = Eval(qdf.Parameters(0).Name)
Set rst = qdf.OpenRecordset
MsgBox rst!id
End Sub