访问vba requery oddness

时间:2015-12-21 17:17:19

标签: vba ms-access access-vba ms-access-2007

自从我在VBA工作以来已经有一段时间了。我有一个约束形式。它有两个下拉列表。一个列表绑定另一个列表(第一个ddl是值列表。第二个列表在第一个更改时刷新,使用第一个值为第二个创建查询。该值用作fk中的fk表格也是绑定的。)

无论如何,当首次运行表单并使用ddl 1的默认值时,如果第二个组合框为空,并且我尝试获取该值,则它为null,这是您所期望的。但是,我有代码在ddl1的值更改时运行,以重新查询ddl2。当它重新查询时,如果列表为空,并且我执行了combobox1.value,而不是null,则值为1.这是令人困惑的,因为,由于列表为空,我认为它应该为null。这里发生了什么?这就是我所拥有的:

Combo1绑定到表 组合2使用此查询:

SELECT tbl_office.id, tbl_office.office_name
FROM tbl_office
WHERE (((tbl_office.otherTable_id)=[Forms]![dlg_addDivision].[Combo1]));

在Combo1 afterUpdate事件之后:

  me.Combo2.requery

因此,在combo1 afterUpdate之后,上面的sql被调用。如果这会产生一个空数据集,并且我尝试获取combo2的值,即使该列表为空,该值也表示它为1

感谢

1 个答案:

答案 0 :(得分:1)

requery重新查询List - 而不是值。价值保持原样。这不是一个错误,这是一个功能 ;-) 如果您翻阅已填充的数据集,则不希望在没有用户交互的情况下更改它们。 List只是dataEntry的帮助(和验证 - 如果你检查“只允许列表项目”) - 但它与你的数据集无关。 通过像您建议的那样将值设置为第一个条目:Me.Combo2.Value = Me.Combo2.ItemData(0),您可以有意更改数据集。这就是应该如何发生的。不是通过更改列表。