【问题标题】:Program change of row source induces rogue values行源的程序更改导致流氓值
【发布时间】:2013-06-11 22:53:08
【问题描述】:

我在表单上有一个组合框:

ControlSource=目标基础 ---------- [表单记录源中的字段]
RowSource=Target Basis -------------- [同名的单独表]
RowSourceType = 表/查询

“目标基础”表有 20 多个值。上述行为符合预期......直到,

VB代码对上面的改动如下:

Select Case xyzVar   'xyzVar is taken from another field on form.
   Case xyzValue
      Me.Target_Basis.RowSourceType = "Value List"
      Me.Target_Basis.RowSource = vbNullString
      Me.Target_Basis.RowSource = "'Trend Channel'; 'Adjusted Trnd Ch.'"
      Me.Target_Basis.Locked = False
      Me.Target_Basis = "Choose"
   Case Else    'etc.

完成上述代码后,文字“Choose”按预期出现在combo中,但是当用户放下选择列表时,只出现一个选项,即以下文字--

SELECT [目标基础].Basis FROM [目标基础]

我在整个数据库上使用了 documenter,并确定上面的查询没有在任何地方定义。我假设系统必须从 controlSource 名称生成它。为了检查这一点,我将单独表(即 rowSource 表)的名称从“目标基础”更改为“目标类型”。我得到了相同的行为,除了现在列表中的单个项目是--

SELECT [Target Type].Basis FROM [Target Type]

那时我将表的名称改回“目标基础”;但是,出现在下拉列表中的项目仍然如上——尽管如此,系统中既不存在查询也不存在表“目标类型”。我尝试关闭、压缩和重新打开数据库;没有变化。

进一步的实验揭示了以下内容:

  • 当代码完成执行时,rowSourceType 和 rowSource 应该是正常的。我通过创建一个输出这些属性的按钮来检查这一点。然而,只要用户单击组合的下拉箭头,rowSource 属性就会更改为上面的 SELECT 语句。 rowSourceType 保持“值列表”,这就是它出现在下拉列表中而不是执行的原因。

  • 如果controlSource被删除,即控件未绑定,问题就消失了。

这个查询是从哪里来的??

非常感谢任何见解 - IG

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    首先,我不确定你为什么会有:

    Me.Target_Basis.RowSource = vbNullString

    我认为这是不必要的,可能是导致问题的原因。

    尝试添加 Me.Target_Basis.Requery 以刷新组合框列表。

    【讨论】:

    • vbNullString 实际上是不必要的(来自此代码的另一个版本的工件)。但是,删除它没有任何效果。重新查询也无济于事,因为正如我所提到的,当用户单击组合下拉箭头时,流氓值恰好出现。在此之前,rowsource val 根据代码是正确的。
    【解决方案2】:

    访问经常会留下“机器中的幽灵”。我已经使用 Access 将近 20 年了,我无法告诉您我必须解决多少次问题,然后将所有表单/宏/查询/等导入到一个新的空数据库中。它发生了。不确定这是否是您当前的问题,但确实会发生。

    【讨论】:

    • 听起来不错,所以我将整个数据库导入了一个新的空数据库。相同的行为。我的解决方案——找到了一种方法来使用这个控件作为未绑定的。感谢您的尝试。
    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多