1

我正在 MS Access 2007 中处理一个复杂的项目。我很难找到正确的方法/语法来重新查询开放表单之外的查询。我还是 VBA 的新手,所以如果我犯了错误或不正确,请原谅我。

我创建了一个查询,它使用表单中特定组合框的值作为其 WHERE 条件的一部分。我已经测试过了,它工作得很好。现在我正在为相关组合框处理“更新后”事件,以便当我更改相关组合框的值时,它会自动告诉我的查询使用 WHERE 子句中的新值重新运行。

我原本想在 VBA 中使用以下命令

    DoCmd.Requery [Queries]![TestQuery]

但我不清楚是否可以使用 DoCmd.Requery,因为查询在开放表单之外并且没有嵌入其中。

我正在寻找有关如何最好地实现此效果的选项,而不仅仅是 VBA。所以如果一个宏会更好,请给我一个例子来工作

更新 只是为了让事情更清楚一点 这里是选择查询的实际 SQL 代码,我想在更新事件之后通过它重新查询。

    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 条件重新运行。

4

2 回答 2

1

丹克。

如何构建报告仍然很重要。我会假设此查询是报告的记录源,并且仅当您从正在更新的这个表单中请求它时才会生成报告。在这种情况下,查询应该在您加载报告时自动获取更新的值;如果您希望在关闭表单后生成报告,那么一旦组合框被破坏,查询将无法工作。我仍在猜测您究竟想在这里做什么,但我只想说,我不建议使用依赖于表单中的对象的存储查询。

于 2013-12-30T23:30:26.970 回答
0

一种更简洁的方法是在 OpenReport 调用中使用 WhereCondition:

(在按钮内单击 ReportSelect)

DoCmd.OpenReport "YourReportName", acViewPreview,,"EntityID=" & Me.BusinessUnit

这将打开按打开它的表单过滤的报表,但仍允许报表打开,并在表单关闭时显示所有数据。

凯文

于 2013-12-30T22:00:16.750 回答