访问 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 属性包含来自绑定控件的未编辑数据,并且在所有视图中都是只读的。

如果您需要跟踪未绑定控件的旧值,您可以通过代码手动完成:例如,您可以使用表单的 CurrentLoad 事件或组合框的 BeforeUpdate 事件将初始值加载到表单的 VBA 模块中定义的变量中。

一种(可能)更好的方法

您不需要维护一个专门的布尔列来确定该字段是否显示在另一个组合中。

让我们用一个具体的例子:

假设您的 Form1 上有 3 个组合框:Combo1Combo2Combo3

我想显示每个国家的列表,并从列表中排除我已经在其他组合框中选择的国家。

Combo1RowSource 设置为:

  SELECT Country.ID, 
         Country.CountryName 
  FROM Country 
  WHERE (Country.ID Not In ([Forms]![Form1]![Combo2], 
                            [Forms]![Form1]![Combo3])) 
  ORDER BY Country.[CountryName]; 

Combo2RowSource 设置为:

  SELECT Country.ID, 
         Country.CountryName 
  FROM Country 
  WHERE (Country.ID Not In ([Forms]![Form1]![Combo1], 
                            [Forms]![Form1]![Combo3])) 
  ORDER BY Country.[CountryName]; 

Combo3RowSource 设置为:

  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 属性的主要内容,如果未能解决你的问题,请参考以下文章

在wpf中访问数据网格内的组合框属性

即使有焦点也无法访问组合框文本属性

如何在访问中禁用组合框上的自动完成功能?

是否可以为特定记录禁用/启用访问子表单中的控件?访问 2000 - VBA

访问报告中的绑定组合框为空

访问 VBA - 使用组合框(多值字段)时类型不匹配