如何获取组合框(2)列的Oldvalue?

时间:2019-01-25 11:41:06

标签: vba ms-access

我正在尝试编写一些代码来存储对表单进行的更改(旧值和新值)。我的代码工作正常,但是我的问题是组合框及其边界。 例如,我有性别组合框,其源表如下:-

 ID    CODE    GENDER
 1     0       Male
 2     1       Female

,并且它绑定到column(1)。 当发生变化时,可以说从Male到Female的性别。OldValue将为0,但我真正想要的是OldValue可以在Column(2)上捕获对应的值,即文本“ Male”不为0

下面的代码是我没有运气尝试过的。

Dim ctl As Access.Control
Dim old_val As String
Dim new_val As String
Dim fld_name As String
For Each ctl In Me.Controls
    If ctl <> ctl.OldValue Then
       fld_name = ctl.Name
       old_val = ctl.OldValue.Column(2) 'or ctl.Column(2).OldValue and both gives an error
       new_val = ctl.Column(2)
    End If
next ctl

任何帮助将不胜感激,在此先感谢您。

4 个答案:

答案 0 :(得分:0)

除了使用.Oldvalue绑定列之外,我认为您不能引用任何其他内容。 Combo.column(2).OldValue永远不会这样存储,因此您只能按原样“实时”引用它。

因为它是相关数据,所以我总是可以随时查找它。

答案 1 :(得分:0)

我要做的方法是使用一个未绑定的组合框,并使用VBA通过DAO或SQL甚至在隐藏的绑定控件上更改实际的字段值。

答案 2 :(得分:0)

对于任何面临相同困境的人,我能想到的唯一解决方法是采用OldValue并对其源表运行Dlookup函数。

答案 3 :(得分:0)

  1. 将新值写入内存。
  2. 将控件重新设置为 .OldValue
  3. 捕获 Column(x) 以获取历史记录或其他内容。
  4. 写回新值。
strNew = Nz(ctlX.Column(1), "*emty*")
varMemoryValueNew = ctlX.Value 
ctlX.Value = ctlX.OldValue
strOld = Nz(ctlX.Column(1), "*emty*") 
ctlX.Value = varMerkerValueNew