我有两组代码,它们是相同的我只是将变量更改为另一个存在的集合,现在我改变的那些我得到一个错误说“运行时错误'3061':参数太少。预期6 。“
这是更改后的代码:
Dim rec As Recordset
Dim db As Database
Dim X As Variant
Set db = CurrentDb
Set rec = db.OpenRecordset("UnitMoreInfoQ")
Const msgTitle As String = "Open Explorer"
Const cExplorerPath As String = "C:\WINDOWS\EXPLORER.EXE"
Const cExplorerSwitches As String = " /n,/e"
cFilePath = rec("ProjFilePath")
它突出了这一行:
Set rec = db.OpenRecordset("UnitMoreInfoQ")
这是第一个代码:
Dim rec As Recordset
Dim db As Database
Dim X As Variant
Set db = CurrentDb
Set rec = db.OpenRecordset("ProjectMoreInfoQ")
Const msgTitle As String = "Open Explorer"
Const cExplorerPath As String = "C:\WINDOWS\EXPLORER.EXE"
Const cExplorerSwitches As String = " /n,/e"
cFilePath = rec("ProjFilePath")
如您所见,该行具有相同数量的参数:
Set rec = db.OpenRecordset("ProjectMoreInfoQ")
由于这个原因,这让我很困惑。如何解决此错误?
答案 0 :(得分:2)
在测试数据库时,我没有得到与您相同的结果,但我仍然不明白其中的区别。但是,也许我们仍然可以得到一些尽管我感到困惑的东西。
该查询包含6个表单控件的引用,例如[Forms]![WorkOrderDatabaseF]![Text71]
。虽然您在db.OpenRecordset("UnitMoreInfoQ")
处遇到“太少参数”错误时确定表单已在表单视图中打开,但Access不会检索这些值并希望您提供它们。
因此修改代码以提供这些参数值。
Dim rec As DAO.Recordset
Dim db As DAO.database
Dim prm As DAO.Parameter
Dim qdf As DAO.QueryDef
Dim X As Variant
Set db = CurrentDb
'Set rec = db.OpenRecordset("UnitMoreInfoQ")
Set qdf = db.QueryDefs("UnitMoreInfoQ")
For Each prm In qdf.Parameters
prm.value = Eval(prm.Name)
Next
Set rec = qdf.OpenRecordset(dbOpenDynaset) ' adjust options as needed
我将留下以下原始答案的其余部分,以防其他人尝试解决类似问题。但我最好的猜测是,此代码更改将为您提供所需的内容,如果该窗体在窗体视图中打开,应该可以工作。
在立即窗口中运行此语句。 (您可以使用 Ctrl + g 打开立即窗口。)
DoCmd.OpenQuery "UnitMoreInfoQ"
当Access打开查询时,它会要求您为其标识的第一个参数提供值。该参数的名称包含在参数输入对话框中。它会询问每个参数的值。
将这些“参数名称”与查询的SQL进行比较。一般来说,拼写错误。
使用数据库的副本,DoCmd.OpenQuery("UnitMoreInfoQ")
会询问我6个参数。
以下是我在立即窗口中看到的内容:
? CurrentDb.QueryDefs("UnitMoreInfoQ").Parameters.Count
6
for each prm in CurrentDb.QueryDefs("UnitMoreInfoQ").Parameters : _
? prm.name : next
[Forms]![WorkOrderDatabaseF]![Text71]
[Forms]![WorkOrderDatabaseF]![ClientNameTxt]
[Forms]![WorkOrderDatabaseF]![WorkOrderNumberTxt]
[Forms]![WorkOrderDatabaseF]![TrakwareNumberTxt]
[Forms]![WorkOrderDatabaseF]![WorkOrderCompleteChkBx]
[Forms]![WorkOrderDatabaseF]![WorkOrderDueDateTxt]
运行此代码时,请确保在表单视图中打开名为 WorkOrderDatabaseF 的表单:
Set rec = db.OpenRecordset("UnitMoreInfoQ")
答案 1 :(得分:1)
[UnitMoreInfoQ]查询是否可以自行正确执行?如果您在访问中输入错误字段,则会将该字段视为参数。
答案 2 :(得分:0)
ProjectMoreInfoQ和UnitMoreInfoQ是不同的查询...听起来像一个需要6个参数而另一个不需要。查看Access中的查询,看看是否定义了参数。