访问 2000 组合框 oldvalue 属性
Posted
技术标签:
【中文标题】访问 2000 组合框 oldvalue 属性【英文标题】:Access 2000 Combo box oldvalue property 【发布时间】:2011-06-20 03:19:46 【问题描述】:我正在使用 Access 2000,有一个包含 2 列的表,第 1 列存储 26 个名称,第 2 列存储一个布尔值(用于检查该名称当前是否显示在 8 个组合框中的 1 个中)。
TableColumns:
ColumnName(Text) &
NameSelected(Yes/No)
选择组合框值时,我希望从其他组合框的列表中删除该值,因此它消除了重复项。我有一个填充组合框的查询,它选择NameSelected
为假的所有名称。
问题:
我尝试从许多不同的事件中访问combobox.oldvalue
,但它似乎始终保持新值。
我做错了吗?如果是这样,有什么想法吗?
或者有更好的方法吗?我试过没有第二列,只对每个组合框进行查询,从表中选择不等于其他控件的选定文本的所有名称,但这从不显示任何内容。
【问题讨论】:
【参考方案1】:OldValue 属性
OldValue
仅适用于绑定字段。 documentation 说:
OldValue 属性包含来自绑定控件的未编辑数据,并且在所有视图中都是只读的。
如果您需要跟踪未绑定控件的旧值,您可以通过代码手动完成:例如,您可以使用表单的 Current
或 Load
事件或组合框的 BeforeUpdate
事件将初始值加载到表单的 VBA 模块中定义的变量中。
一种(可能)更好的方法
您不需要维护一个专门的布尔列来确定该字段是否显示在另一个组合中。
让我们用一个具体的例子:
假设您的 Form1
上有 3 个组合框:Combo1
、Combo2
、Combo3
。
我想显示每个国家的列表,并从列表中排除我已经在其他组合框中选择的国家。
将Combo1
的RowSource
设置为:
SELECT Country.ID,
Country.CountryName
FROM Country
WHERE (Country.ID Not In ([Forms]![Form1]![Combo2],
[Forms]![Form1]![Combo3]))
ORDER BY Country.[CountryName];
将Combo2
的RowSource
设置为:
SELECT Country.ID,
Country.CountryName
FROM Country
WHERE (Country.ID Not In ([Forms]![Form1]![Combo1],
[Forms]![Form1]![Combo3]))
ORDER BY Country.[CountryName];
将Combo3
的RowSource
设置为:
SELECT Country.ID,
Country.CountryName
FROM Country
WHERE (Country.ID Not In ([Forms]![Form1]![Combo1],
[Forms]![Form1]![Combo2]))
ORDER BY Country.[CountryName];
然后为每个组合框设置 GotFocus 事件以根据需要重新查询其内容:
Private Sub Combo1_GotFocus()
Combo1.Requery
End Sub
Private Sub Combo2_GotFocus()
Combo2.Requery
End Sub
Private Sub Combo3_GotFocus()
Combo3.Requery
End Sub
【讨论】:
非常感谢,这对我很有帮助,我不确定我的组合框是否已绑定。至于布尔字段,我确实尝试了你的第二种方法,但我现在可以看到我哪里出错了……在 WHERE 语句中。谢谢大佬!! :)以上是关于访问 2000 组合框 oldvalue 属性的主要内容,如果未能解决你的问题,请参考以下文章