VBA OpenRecordset产生错误3061

时间:2015-05-21 15:27:11

标签: vba ms-access access-vba

databasename = "qryDataExport"
Dim grpfield As String
grpfield = "Group"

Dim keys As DAO.Recordset
groupcmd = "SELECT [" & databasename & "].[" & grpfield & "] FROM [" & databasename & "] GROUP BY [" & databasename & "].[" & grpfield & "]"
Set keys = CurrentDb.OpenRecordset(groupcmd, dbOpenSnapshot)

以上产生"错误3061:参数太少。预计13。"什么时候跑。到目前为止,我的阅读有很大的暗示,这可能是字段标题不正确的拼写问题,也可能是定义groupcmd的行中引用不当引起的问题。

我尝试了以下databasename格式:

CurrentDb.Queries.qryDataExport
CurrentDb!Queries!qryDataExport

以上"qryDataExport"。后两者不提供错误消息,而第一种不编译。我已经确认在主表和qryDataExport中都有一个名为Group的列。

使用的模块来自this Google Code page

(编辑:截至目前的完整编辑模块:http://pastebin.com/TJip86ED

从我所看到的情况来看,我认为这是数据库名称定义中非常明显的格式化错误,但我没有足够的经验来使用VBA来发现它并且我已经用完了想法。任何建议都将不胜感激。

EDIT2:generateKML()的内容现在位于ExportToKMLButton_Click(),其中ExportToKMLButton是表单DW_Form上的按钮。当DW_Form打开时,查询qryDataExport可用,但当表单关闭时,查询会提示输入错误消息中提到的13个参数。

2 个答案:

答案 0 :(得分:3)

听起来您的 qryDataExport 查询引用了Access表单上的控件,可能与此类似...

SELECT *
FROM YourTable
WHERE some_field = Forms!Form1!YourTextBox

如果 Form1 已打开(在表单视图中),我可以从Access的查询设计器运行该查询,它将解析对表单控件的引用。

但是,如果我尝试使用与OpenRecordset完全相同的查询,则不会解析引用,并且在该上下文中,Access将其解释为我没有提供值的参数。

对于具有多个控件引用的查询,您可以根据QueryDef语句创建临时SELECT,并遍历其Parameters集合,为每个参数值提供{{1参数的Eval()最后调用.Name方法加载记录集:

QueryDef.OpenRecordset

答案 1 :(得分:0)

使用databasename的方式是正确的(databasename = "qryDataExport"),qryDataExport可能使用表单中的值来过滤数据...这就是为什么当你独立执行查询时,查询发现它丢失了从所述表格中获取的13个参数。

您可以在Click()事件中为表单中的按钮运行此过程,它应该可以正常工作。