【问题标题】:How to get the Oldvalue of a Combobox's (2) column?如何获取组合框 (2) 列的旧值?
【发布时间】:2019-06-19 06:00:46
【问题描述】:

我正在尝试编写一些代码来存储对正在处理的表单所做的更改(旧值和新值)。我的代码运行良好,但我的问题在于组合框及其边界。 例如,我有 Gender 组合框,它的源表如下:-

 ID    CODE    GENDER
 1     0       Male
 2     1       Female

并且它被限制在列 (1) 上。 当发生变化时,可以说从男性到女性,gender.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

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

【问题讨论】:

  • 组合框属性OnEnter 事件您将获得旧值,通过on Change 事件您将获得新值。你试过这个活动吗?
  • 您必须在 Update 事件之前的表单中或在 Update 事件之前的单个控件中运行它,以便您对它执行任何操作。那是设置旧值属性的时候。不确定最终目标是什么?也不是每个控件都有一个 .OldValue 所以代码会在那个时候崩溃。
  • @Minty 已经在“更新前”事件中运行它,我的最终目标是将旧值和新值以及字段名称插入到新表中以跟踪更改。工作完美,我唯一的问题是我之前解释的绑定问题。
  • 好的审核试用。阅读此主题,看看它是否有助于引导您朝着正确的方向前进stackoverflow.com/questions/29617067/…
  • @Minty 谢谢我检查了它,但它没有解决我的问题,正如我之前提到的,我的代码正在工作并且我没有寻找替代方案。我想解释我的问题还不够清楚.谢谢。

标签: vba ms-access


【解决方案1】:

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

因为它是相关数据,我猜你总是可以简单地查找它。

【讨论】:

  • 我开始这么想了。
【解决方案2】:

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

【讨论】:

  • 谢谢,但我认为这是一项简单的任务。
【解决方案3】:

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

【讨论】:

    【解决方案4】:
    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 
    

    【讨论】:

      猜你喜欢
      • 2013-08-07
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多