MS Access(2010)VBA过滤器不在一个子窗体上工作

时间:2013-03-15 22:00:38

标签: ms-access access-vba

过去几天我一直在努力找出这个问题的根源。我的互联网搜索导致这个问题的原因并不富有成效。

这是一个程序使用Access作为前端UI,用户可以将客户端信息输入到SQL Server上托管的数据库中。

互动应如下:

  • 用户点击主窗体的客户列表
  • 帐户列表以主窗体显示
  • 用户点击帐户
  • 产品列表显示在表格子表单中(用于更新/添加新产品)
  • 用户选择其中一个产品
  • 相应的月度产品值显示在另一个子表单上(不在产品列表子表单下)

初始加载主窗体时,默认情况下每月产品值过滤器值为0。选择其中一个产品时,应动态更新过滤器。它是在产品表单的Form_Current事件下完成的。

我无法弄清楚:过滤器似乎停留在默认状态。我使用Debug.Print语句检查每月产品值表单的最新过滤器值,并显示过滤器的正确产品ID。但它根本没有在UI上更新。

甚至更奇怪的是:当我对vba代码进行更改(有时与过滤器无关)并且在应用程序模式下保存时,它可以正常工作(即列出月度值),例如:

.filter = "prod_id = " & iProdID

.filter = "[prod_id] = " & iProdID

但是当我将其更改为设计模式并开始进行与此问题无关的更改时,它再次处于应用程序模式时停止工作。行为是如此不可预测,我不知道如何继续。我甚至删除了表单并重新创建它,它仍然表现得相似。

我使用相同的方法在VBA中为其他子表单处理文件管理器并且它们的行为正确。希望对我忽略的内容得到一些反馈!

谢谢! KIAT

1 个答案:

答案 0 :(得分:0)

我现在就开始工作了。为产品值分配过滤器的原始方法是将过滤器值直接分配给Products表单(Form_ProductValsForm_Products事件中的“产品值”表单(Form_Current)。这导致了结果的不一致。

现在我更改了代码,通过主客户端表单(包含Products和ProductVals子表单)分配过滤器值。所以代码改为:

Form_ProductVals.Form.Filter = "prod_id = " & <new ID>

Form_Clients.ProductVals.Form.Filter = "prod_id = " & <new ID>

这就是诀窍。我虽然没有对这种差异的解释。