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)
Run Code Online (Sandbox Code Playgroud)
以上产生“错误 3061:参数太少。预期为 13。” 运行时。到目前为止,我的阅读已经严重暗示这可能是字段标题不正确的拼写问题或由定义 groupcmd 的行中的不正确引用引起的问题。
我为 databasename 尝试了以下格式:
CurrentDb.Queries.qryDataExport
CurrentDb!Queries!qryDataExport
Run Code Online (Sandbox Code Playgroud)
而以上"qryDataExport"。后两个不提供错误消息,而第一个不编译。我已经确认在主表和 qryDataExport 中都有一个名为 Group 的列。
正在使用的模块来自这个 Google 代码页。
(编辑:截至此时的完整编辑模块:http : //pastebin.com/TJip86ED)
从我所看到的情况来看,我认为这是数据库名称定义中一个非常明显的格式错误,但是我没有足够的 VBA 经验来发现它,而且我的想法已经用完了。任何建议将不胜感激。
EDIT2: 的内容generateKML()现在在ExportToKMLButton_Click(),其中ExportToKMLButton是 Form 上的 Button DW_Form。当DW_Form打开时,查询qryDataExport是可用的,但是当表单关闭时,查询提示输入错误信息中提到的13个参数。
听起来您的qryDataExport查询引用了 Access 表单上的控件,可能与此类似...
SELECT *
FROM YourTable
WHERE some_field = Forms!Form1!YourTextBox
Run Code Online (Sandbox Code Playgroud)
如果Form1已打开(在表单视图中),我可以从 Access 的查询设计器运行该查询,它将解析对表单控件的引用。
但是,如果我尝试使用与 完全相同的查询OpenRecordset,则不会解析引用,并且在这种情况下,Access 会将其解释为我尚未为其提供值的参数。
对于有多个控件引用您的查询,您可以创建一个临时QueryDef基于您SELECT通过其声明和循环Parameters集合,提供每个参数值Eval()参数的的.Name 最后调用QueryDef.OpenRecordset方法加载您的记录:
Dim prm As DAO.Parameter
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.CreateQueryDef(vbNullString, groupcmd)
For Each prm In qdf.Parameters
prm.Value = Eval(prm.Name)
Next
Set keys = qdf.OpenRecordset
Run Code Online (Sandbox Code Playgroud)