【问题标题】:Access VBA: Recordset doesn't work with a specific query?Access VBA:记录集不适用于特定查询?
【发布时间】:2020-07-14 18:39:20
【问题描述】:

首先:我不是专家,我几乎是 VBA 的菜鸟。 关于我的问题:

所以我在 VBA 中使用 Recordset,如果我打开的 Recordset 是一个表或一个简单的查询,它可以工作, 但是我有另一个查询要作为该记录集的基础,但是当我这样做时,它不起作用。

我尝试与 Recordset 一起使用的查询基本上包含一个字段“用户”,该字段根据表单的文本框进行更改。是否无法将该查询作为记录集打开,因为它取决于表单的文本框,还是我在代码中遗漏了什么?

这是我的代码供参考:

Dim db As Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("tblExample")

Do Until rs.EOF
    Debug.Print rs.Fields("FieldExample")
    rs.MoveNext
Loop

rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

我还尝试将“tblExample”替换为与我尝试使用的查询基本相同的 SQL 字符串,但没有成功。不过,查询本身确实可以正常工作。

我正在尝试使用的查询(缩短版):

SELECT Inventar.nutzName FROM Inventar WHERE (((Inventar.nutzName) Like "*" & [Formulare]![frmInventarNutzerFilter]![cbxNutzer] & "*"))

【问题讨论】:

  • 您的查询是什么?
  • 稍微缩短了一点,但不适用于记录集的核心部分是:“SELECT Inventar.nutzName FROM Inventar WHERE (((Inventar.nutzName) Like "" & [Formulare]![frmInventarNutzerFilter]![cbxNutzer] & ""))"(我的访问是德语,所以有些术语也是德语:p)
  • 请修改您的问题以包含导致问题的 SQL。

标签: vba ms-access


【解决方案1】:

您的代码无法“看到”参数值,因此您必须明确地传递它:

Dim db As DAO.Database
Dim qd As DAO.QueryDef
Dim rs As DAO.Recordset

Set db = CurrentDb
Set qd = db.QueryDefs("YourQuery")
qd.Parameters(0).Value = [Forms]![frmInventarNutzerFilter]![cbxNutzer] 
Set rs = qd.OpenRecordset()

Do Until rs.EOF
    Debug.Print rs.Fields("FieldExample")
    rs.MoveNext
Loop

rs.Close
qd.Close
db.Close
Set rs = Nothing
Set db = Nothing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2018-02-25
    • 2014-08-14
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多