我正在使用Access 2000,有一个包含2列的表,第1列存储26个名称,第2列存储一个布尔值(用于检查该名称当前是否在8个组合框中的1个中显示)。
TableColumns:
ColumnName(Text) &
NameSelected(Yes/No)
当选择组合框值时,我希望从其他组合框的列表中删除该值,这样就可以消除重复项。我有一个填充组合框的查询,它会选择NameSelected
为假的所有名称。
问题:
我试图从许多不同的事件中访问combobox.oldvalue
,但似乎总是保留新值。
我做错了吗?如果是这样,任何想法是什么?
或者有更好的方法吗?我试过没有第二列,只是对每个组合框进行查询,从表中选择不等于其他控件的选定文本的所有名称,但这从未显示任何内容。
答案 0 :(得分:2)
OldValue属性
OldValue
仅适用于绑定字段。 documentation说:
OldValue属性包含来自绑定控件的未编辑数据,并且在所有视图中都是只读的。
如果您需要跟踪未绑定控件的旧值,可以从代码中手动执行:例如,您可以使用表单的Current
或Load
事件或组合框的{ {1}}事件将初始值加载到表单的VBA模块中定义的变量中。
A(可能)更好的方法
您不需要维护一个专用的布尔列来查明该字段是否显示在另一个组合中。
让我们用一个具体的例子:
假设您BeforeUpdate
上有3个组合框:Form1
,Combo1
,Combo2
。
我想在每个国家/地区中显示国家/地区列表,并从列表中排除我在其他组合框中选择的国家/地区。
将Combo3
的{{1}}设置为:
RowSource
将Combo1
的{{1}}设置为:
SELECT Country.ID,
Country.CountryName
FROM Country
WHERE (Country.ID Not In ([Forms]![Form1]![Combo2],
[Forms]![Form1]![Combo3]))
ORDER BY Country.[CountryName];
将RowSource
的{{1}}设置为:
Combo2
然后为每个组合框设置GotFocus事件,以根据需要重新查询其内容:
SELECT Country.ID,
Country.CountryName
FROM Country
WHERE (Country.ID Not In ([Forms]![Form1]![Combo1],
[Forms]![Form1]![Combo3]))
ORDER BY Country.[CountryName];