当vba脚本运行时,访问查询无法使用表单控件

时间:2013-05-01 16:52:38

标签: forms ms-access

我有一个带有一些列表框的表单,我可以使用它从列表中选择一个值。我有一个使用表单值作为过滤器的查询。组合工作正常 - 直到我尝试使用VBA脚本打开查询。此时,我收到一条错误消息,指出查询期望参数。代码段是:

查询 - [实体选择] - 使用表单(一次只使用一个列表框 - 这将找出它是哪一个,并从表[实体列表]中选择适当的项目):

SELECT val(forms.selections.select_year) as Yr, * 
FROM [entity list] 
where [group]=forms!selections!select_group
UNION select val(forms.selections.select_year) as Yr, * from [entity list] where [G_SG]=forms!selections!select_subgroup
UNION select val(forms.selections.select_year) as Yr, * from [entity list] where [ID_Name]=forms!selections!select_entity
UNION select val(forms.selections.select_year) as Yr, * from  [entity list] where forms!selections!select_group like "All*";

查询 - 使用先前查询的结果:

SELECT ... 
FROM [DTXX Detail] 
INNER JOIN [Entity selections] ON ([DTXX Detail].Yr = [Entity selections].Yr) AND ([DTXX Detail].entityid = [Entity selections].EntityID)
ORDER BY ...

这些工作正常 - [entity selections]查询返回相应的行,第二个查询成功使用1st on作为过滤器并返回相应的行。

然后,我添加了一个VBA脚本,将上面的一些报告输出到Excel文件中(此脚本在其他数据库中没有任何形式)。脚本的相关部分是

Source = "[" & Exports.Fields("Source") & "]"
Source = "Select * from " & Source & ";"
If ((Source <> "") And (WS_Name <> "")) Then
    'Get the source data
    Set source_data = DB.OpenRecordset(Source)

Source最终为Select * from [report - details],这是上面第二个查询的名称。没什么复杂的。我得到的错误是:

Runtime error 3601.  Too few parameters.  Expected 4

在脚本处于活动状态时,查询似乎无法访问表单。但是在监视窗口中,脚本知道所有表单控件的值。

你能帮帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:1)

考虑在SQL语句之外提取表单值[report-details]。有关详细信息,请参阅此处:SO answer

如上所述,表单值不适用于VBA中使用的记录集。