【发布时间】:2013-12-30 20:25:29
【问题描述】:
我正在使用 MS Access 2007 处理一个复杂的项目。 我很难找到正确的方法/语法来重新查询开放表单之外的查询。我还是 VBA 的新手,如果我犯了错误或不正确,请原谅我。
我创建了一个查询,它使用表单中特定组合框的值作为其 WHERE 条件的一部分。我已经测试过了,它工作得很好。现在我正在为相关组合框处理“更新后”事件,以便当我更改相关组合框的值时,它会自动告诉我的查询使用 WHERE 子句中的新值重新运行。
本来想在VBA中使用如下命令
DoCmd.Requery [Queries]![TestQuery]
但我不清楚是否可以使用 DoCmd.Requery,因为查询在打开的表单之外并且没有嵌入其中。
我正在寻找有关如何最好地实现此效果的选项,而不仅仅是 VBA。因此,如果宏可以更好地工作,请给我一个例子来工作
更新 只是为了让事情更清楚一点这里是选择查询的实际 SQL 代码,我想在 Update 事件之后通过它重新查询。
SELECT ForcastTrans.Location, ForcastTrans.Client, ForcastTrans.Department, ForcastTrans.Account, ForcastTrans.Currency, ForcastTrans.Month1, ForcastTrans.Month2, ForcastTrans.Month3, ForcastTrans.Month4, ForcastTrans.Month5, ForcastTrans.Month6, ForcastTrans.Month7, ForcastTrans.Month8, ForcastTrans.Month9, ForcastTrans.Month10, ForcastTrans.Month11, ForcastTrans.Month12
FROM ForcastTrans
WHERE (((ForcastTrans.EntityID)=[Forms]![ReportSelect]![BusinessUnit]));
正如我之前所说,这个查询本身就可以正常工作,我只需要能够发出一个更新后事件,它会根据更新的 WHERE 条件告诉这个查询重新运行。
【问题讨论】:
-
是什么类型的查询?选择,制作表等,等等?您希望如何处理查询结果对于确定运行查询的最佳路径很重要。如果您当时需要结果,您可能想要创建一个记录集。如果它正在创建表或更新表等,您可能只想调用查询。
-
这是一个 SELECT 查询,我将它用作构建报表的基础。它需要是动态的,这样我就不需要在每次他们向数据库中的记录添加一些新类别时回来构建新报告。
-
如何构建报表仍然很重要。我会假设此查询是报告的记录源,并且仅当您从正在更新的这个表单中请求它时才会生成报告。在这种情况下,查询应该在您加载报告时自动获取更新的值;如果您希望在关闭表单后生成报告,那么一旦组合框被破坏,查询将无法工作。我仍在猜测您到底想在这里做什么,但我只想说,我不建议使用依赖于表单中的对象的存储查询。
-
这实际上很有帮助。您是绝对正确的,相同的表单将具有打开请求的报告的按钮。当您启动 Open Form 命令时,我没有想过它会强制查询在那一刻重新运行。我将对此进行一些测试以确保它满足我的需求,但我会说这可能会解决我的问题
-
是的,这解决了这个问题。对此提出答案,以便我感谢您帮助我解决问题
标签: ms-access macros vba ms-access-2007 dynamic-queries