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个参数。
答案 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()事件中为表单中的按钮运行此过程,它应该可以正常工作。