【问题标题】:OpenRecordset not recognisng query criteriaOpenRecordset 无法识别查询条件
【发布时间】:2017-07-05 13:09:27
【问题描述】:

我开发了一个 Access 数据库查询,它引用表单上的对象以动态过滤数据。过滤查询的条件如下:

[Forms]![frmMain]![NavigationSubform].[Form]![Frame64]

其中 [frame64] 是用户在表单上选择两个选项之一的位置。

虽然此查询在 Access 中运行良好,但我想在一段 VBA 代码中使用此查询,但问题是,当我尝试打开记录集时,VBA 不允许我。

Dim db As Database
Dim rs As Recordset    


Set db = CurrentDb
Set rs = db.OpenRecordset("qryMergeEzineCompleteMerges", dbOpenDynamic, dbSeeChanges)

通过研究,我发现这是因为 VBA 无法识别我定义的查询条件,因为它引用了一个表单。

谁能告诉我如何在 VBA 中引用这个记录集,以便它按照我在查询本身中规定的条件进行过滤?

非常感谢

【问题讨论】:

标签: ms-access vba


【解决方案1】:

您需要通过QueryDef 打开记录集。

Sub Whatever()
    Dim db As Database
    Dim qdf As QueryDef
    Dim rs As Recordset

    Set db = CurrentDb()
    Set qdf = db.QueryDefs("qryMergeEzineCompleteMerges")

   'add any parameters here
    With qdf
        .Parameters("[parameter1]").Value = value1
        .Parameters("[parameter2]").Value = value2
    End With

    Set rs = qdf.OpenRecordset(dbOpenDynaset)

    '...

    rs.Close
    Set rs = Nothing
    qdf.Close
    Set qdf = Nothing
    Set db = Nothing
End Sub

【讨论】:

  • 嗨 Kostas,现在这对我来说很有意义。我不确定语法,但你解释得很好。非常感谢
【解决方案2】:

这听起来可能很愚蠢,但解决这个问题的最简单方法是为 dbOpenDynamic 和 dbSeeChanges 值创建两个常量,并将它们的值设置为正确的整数值。当然,您也可以在 OpenRecordset 调用中键入相关的整数值。

【讨论】:

  • 这不是这里的问题。
  • 嗨,安德烈,谢谢。我对 VBA 编码很陌生,所以恐怕你的回答对我来说意义不大。您能否弥合差距并为我充实您的解释,以便我有更好的机会理解它?谢谢
  • 问题是整数值可能会根据 [Frame64] 中的设置而改变
  • @SteveO'Dea:答案和解释在 André 提供的链接中。
  • 谢谢大家,看起来线程很相似,尽管我喜欢 Kostas 下面的解决方案。感谢您的输入
猜你喜欢
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 2021-12-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多