Access - 查询在手动运行时工作正常,但无法使用它创建记录集

时间:2016-04-28 14:08:08

标签: vba ms-access access-vba ms-access-2007

我有一个名为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 '。

我在这里遗漏了什么吗?或者有更好的方法吗?

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