组合框的访问选择查询并不总是评估复选框值
Posted
技术标签:
【中文标题】组合框的访问选择查询并不总是评估复选框值【英文标题】:Access select query for combo box not always evaluating checkbox value 【发布时间】:2013-02-05 15:43:46 【问题描述】:我有一个带有组合框和复选框 (chkClosed) 的表单。对于组合框,我将行源作为选择查询。它有两个字段(均来自表 1):Field1、Field2 (未显示) 其条件为 [Forms]!Form1]![chkClosed]
表1示例数据:
Field1 Field2
Test -1
Test1 0
Test2 0
Test3 -1
问题是当我在运行时取消选中 chkClosed 时,下拉列表不会改变。我知道它正确地评估它,就好像我切换到设计然后回到表单视图,而它检查它在下拉列表中显示 Test & Test3,反之亦然。只是它评估它是在启动时而不是不断地,我相信我将不得不改变一些事件。这只是一个例子,我正在做的数据实际上来自 SQL 源,但逻辑仍然适用我只是使用条件:IIf([Forms]![Form1]![chkClosed]=-1,1,0)
【问题讨论】:
【参考方案1】:您需要重新查询组合框以更新行源。在复选框的 AfterUpdate 事件中,添加以下行:
Private Sub chkClosed_AfterUpdate()
Me.Combo1.Requery
End Sub
【讨论】:
确实解决了我的问题,但我不明白为什么?行源是否仅在表单启动时编译? 有点。为了让 Access 知道它必须在您的复选框值更改时重新查询控件源,它必须构建一个依赖关系树(类似于 Excel 在决定何时需要重新计算函数时所做的事情)。这会增加大量的复杂性,它可能仍然不是你想要的。想象一下,您的行源查询需要 30 秒才能执行。当用户选中或取消选中其他框时,您可能决定不希望这种情况发生。 Access 让开发人员做出决定;在我看来是一个明智的选择。 那么它通常什么时候编译该列表? 表单打开时。当您显式调用控件的 .Requery 方法时。我想就是这样。以上是关于组合框的访问选择查询并不总是评估复选框值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?