【问题标题】:Form Fails to Requery After Query SQL Altered (MS Access 2003/VBA)查询 SQL 更改后表单无法重新查询 (MS Access 2003/VBA)
【发布时间】:2015-09-08 03:05:28
【问题描述】:

我有一个基于选择查询的 MS Access 2003 表单。它包含几个组合框,可用于过滤表单记录。除了其中一个之外,所有这些都按预期工作,我可以让它工作的唯一方法是使用 VBA 替换部分查询的 SQL:

Set qdf = CurrentDb.QueryDefs("MyQuery")
qdfOLD = qdf.sql
qdf.sql = Replace(qdf.sql, strOldCriteria, strNewCriteria)
Me.Requery    ' I've also tried DoCmd.Requery and Forms!MyForm.Requery
qdf.sql = qdfOLD
Set qdf = Nothing

替换部件工作正常,如果我省略最后三行,然后在数据表视图中查看查询,我将只看到预期的记录。但由于某种原因,表单没有重新查询 - 即,我仍然看到所有记录,而不是过滤后的子集。我错过了什么?

【问题讨论】:

    标签: ms-access vba ms-access-2003


    【解决方案1】:

    这不是怎么做的。

    您可以使用 SQL 表达式更改或修改表单的 RecordSource,或者将过滤字符串应用于表单的 Filter 属性。

    无论何时执行此操作,表单都会重新查询。

    【讨论】:

    • 不过,这并不能真正回答我的问题。我使用 Filter 属性使表单上的其他组合起作用,但在这种情况下不起作用。正如你所说,我想我可以创建另一个查询并修改 RecordSource。但我仍然想知道为什么这种方法在这种情况下不起作用。我在同一个表单上成功使用它(单击按钮)来修改查询,然后重新查询另一个打开的表单。为什么我不能重新查询当前表单?
    • 我猜查询被缓存了。您可以尝试设置 Me.RecordSource = Me.RecordSource 来进行 from 重新查询。但同样,这不是如何做到的,或者 - 如果你愿意 - 这是一种次优方法。
    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 2013-09-05
    • 2017-05-06
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多