我试图通过更新按钮将访问数据库查询中的信息发送到Excel电子表格。我发现了一些应该正常运行的代码,但是当我运行它时会说出"运行错误' 3061'。给出的参数太少,至少有1个预期"。
以下是代码:
Sub Rektangelmedrundadehörn1_Klicka()
Sheets("Blad1").Range("A2:B500").ClearContents
Set DB1 = DBEngine.OpenDatabase("Path to my DB")
Set QD1 = DB1.QueryDefs("Name of my Query")
Set RS1 = QD1.OpenRecordset(dbOpenSnapshot, dbReadOnly)
Sheets("Blad1").Range("A2").CopyFromRecordset RS1
RS1.Close
QD1.Close
DB1.Close
End Sub
当我调试它停在"设置RS1"并说它是空的。也许我甚至没有连接我的Access列?我检查了列的名称,它们是相同的。我还在excel vba中添加了对访问和DBO的引用。
我在excel中只使用了2列。 A1,B1
答案 0 :(得分:1)
您的查询SQL中有一些内容,db引擎认为它是一个参数。我猜你的查询包含一个可以在Access应用程序会话中使用的函数,但是不能在从Access会话外部运行的查询中使用。可能性包括用户定义的函数和许多VBA函数。
我的猜测是否正确,db引擎认为是参数。找出那是什么。
如果您知道如何设置临时断点,请在Set QD1
行设置一个。否则,在该行之后添加Stop
语句。 (完成测试后删除Stop
。)
Set QD1 = DB1.QueryDefs("Name of my Query")
Stop
当您运行代码时,这两种方法都会触发中断模式。从中断模式,您可以使用立即窗口检查查询的Parameters
集合。
Debug.Print QD1.Parameters.Count
如果这告诉您Parameters.Count
为1,则可以找出该参数的名称。请注意,参数集合项的编号从0开始。
Debug.Print QD1.Parameters(0).Name
希望一旦看到参数的名称,问题就会清楚。如果没有,请向我们显示参数名称和查询的SQL。