行源的程序更改会导致流氓值

时间:2013-06-11 10:39:09

标签: ms-access

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

  

ControlSource =目标基础---------- [记录源形式中的字段]
  RowSource =目标基础-------------- [一个单独的同名表格]
  RowSourceType =表/查询

表“Target Basis”有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.

完成上述代码后,文本“选择”会按预期显示在组合中,但是当用户删除选项列表时,只会显示一个选项,并且它是以下文本 -

  

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

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

  

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

此时我将表的名称改回“Target Basis”;但是,下拉列表中显示的项目仍然如上所述 - 尽管如此,系统中既不存在查询,也不存在“目标类型”表。我尝试关闭,压缩并重新打开Db;没有变化。

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

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

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

这个查询来自哪里?

非常有必要提出任何见解 - IG

2 个答案:

答案 0 :(得分:0)

首先,我不确定你为什么要这样做:

Me.Target_Basis.RowSource = vbNullString

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

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

答案 1 :(得分:0)

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