VBA访问重新查询当前表单对象之外的查询

时间:2013-12-30 20:25:29

标签: macros ms-access-2007 access-vba dynamic-queries

我正在研究MS Access 2007中的一个复杂项目。 我很难找到正确的方法/语法来重新查询打开表单之外的查询。我仍然是VBA的新人,所以如果我犯错或者我不对,请原谅我。

我创建了一个查询,它使用我的表单中特定组合框的值作为其WHERE标准的一部分。我测试了它,它工作得很好。现在我正在处理有问题的组合框的“更新后”事件,这样当我更改有问题的组合框的值时,它将自动告诉我的查询用WHERE子句中的新值重新运行。

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

    DoCmd.Requery [Queries]![TestQuery]

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

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

UPDATE 只是为了让事情更清楚以下是我想在Update事件后通过此查询重新查询的Select Query的实际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]));

正如我之前所说的,Query本身就可以正常工作,我只需要能够发出一个更新后事件,它将根据更新的WHERE标准告诉该查询重新运行。

2 个答案:

答案 0 :(得分:1)

丹科。

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

答案 1 :(得分:0)

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

(在按钮上点击ReportSelect)

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

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

凯文