我在表单上有一个组合框:
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
答案 0 :(得分:0)
首先,我不确定你为什么要这样做:
Me.Target_Basis.RowSource = vbNullString
我认为这是不必要的,可能会导致问题。
尝试添加Me.Target_Basis.Requery以刷新组合框列表。
答案 1 :(得分:0)
访问通常会留下“机器中的幽灵”。我已经使用Access近20年了,我无法告诉你有多少次我必须修复问题,然后将所有表单/宏/查询/等等导入到一个新的空数据库中。它发生了。不确定这是你当前的问题,但确实发生了。