我在表单上有一个组合框:
ControlSource=Target Basis ---------- [表格记录源中的一个字段]
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”按预期出现在组合中,但是当用户放下选择列表时,只出现一个选项,它是以下文本——
SELECT [目标基础].Basis FROM [目标基础]
我在整个数据库上使用了 documenter,并确定上面的查询没有在任何地方定义。我假设系统必须从 controlSource 名称生成它。为了检查这一点,我将单独表(即 rowSource 表)的名称从“Target Basis”更改为“Target Type”。我得到了相同的行为,除了现在列表中的单个项目是 -
SELECT [目标类型].Basis FROM [目标类型]
那时我将表的名称改回“目标基础”;但是,出现在下拉列表中的项目仍然如上——尽管如此,系统中既不存在查询也不存在表“目标类型”。我尝试关闭、压缩和重新打开数据库;没变。
进一步的实验揭示了以下内容:
当代码完成执行时,rowSourceType 和 rowSource 应该是它们应该的样子。我通过创建一个输出这些属性的按钮来检查这一点。然而,只要用户单击组合的下拉箭头,rowSource 属性就会更改为上面的 SELECT 语句。rowSourceType 保持“值列表”,这就是它出现在下拉列表中而不是执行的原因。
如果controlSource被删除,即控件未绑定,问题就消失了。
这个查询是从哪里来的??
非常有必要提供任何见解 - IG