运行时错误'3061'。参数太少。预期1.(Access 2007)

时间:2011-03-26 20:23:33

标签: ms-access vba

我有以下'set recordset'行无法正常工作。根据我在这个主题上可以找到的所有可用帮助,参数似乎是正确的。

错误显示:

  

“运行时错误'3061'。参数太少。预计为1.”

以下是代码行:

Set rs = dbs.OpenRecordset("SELECT Centre_X, Centre_Y FROM [qry_all_details] 
WHERE ID = " & siteID & ";", dbOpenSnapshot)

Where rs is the recordset (Dim rs As Recordset) and dbs = CurrentDb()

任何帮助都将不胜感激。

我尝试删除WHERE原因没有效果,并且在双引号之间使用单引号,但没有快乐。

非常感谢。

14 个答案:

答案 0 :(得分:44)

“运行时错误'3061'。参数太少。预计为1.”

我相信当你的sql查询中的字段名称与表字段名称不匹配时会发生这种情况,即查询中的字段名称错误或表格可能完全缺少该字段。

答案 1 :(得分:12)

你有:

WHERE ID = " & siteID & ";", dbOpenSnapshot)

你需要:

WHERE ID = "'" & siteID & "';", dbOpenSnapshot)

请注意额外引用(')。 。 。每次都会杀了我

编辑:添加缺少双引号

答案 2 :(得分:5)

我的问题也通过变量名称

周围的单引号解决了

答案 3 :(得分:4)

(对于那些阅读所有答案的人)。我的情况就是我使用Forms!Table!Control格式创建了一个SQL表达式。该格式在查询中是正常的,但DAO无法识别它。我很惊讶,没有人对此发表评论。

这不起作用:

Dim rs As DAO.Recordset, strSQL As String
strSQL = "SELECT * FROM Table1 WHERE Name = Forms!Table!Control;"
Set rs = CurrentDb.OpenRecordset(strSQL)

这是好的:

Dim rs As DAO.Recordset, strSQL, val As String
val = Forms!Table!Control
strSQL = "SELECT * FROM Table1 WHERE Name = '" & val & "';"
Set rs = CurrentDb.OpenRecordset(strSQL)

答案 4 :(得分:2)

我的问题原来是,我改变了一个表来添加一个名为Char的列。 由于这是一个reserved word in MS Access,它需要方形brakcets(单引号或双引号都不好),以便在我可以更新新创建的列之前使alter语句有效。

答案 5 :(得分:1)

确保[qry_all_details]存在并且可以运行。我怀疑它或它使用的任何查询都缺少参数。

答案 6 :(得分:1)

之前我收到了相同的错误消息。 就我而言,它是由类型转换引起的。  检查siteID是否为字符串,如果是,则必须添加简单引号。

希望它会对你有所帮助。

答案 7 :(得分:1)

我遇到了类似的错误:

Set rs = dbs.OpenRecordset _
( _
  "SELECT Field1, Field2, FieldN " _
  & "FROM Query1 " _
  & "WHERE Query2.Field1 = """ & Value1 & """;" _
, dbOpenSnapshot _
)

我通过将“Query1”替换为“Query2”来修复错误

答案 8 :(得分:0)

查询是否包含多个参数siteID,因为如果你想运行查询,一个参数仍然没有填充女巫会给你错误

答案 9 :(得分:0)

在我的情况下,当我尝试在查询中使用新列时出现此错误,我将其添加到MySQL表(链接到MS Access),但没有在MS Access中刷新它。

刷新链接的远程表:

  1. 打开"链接表管理器" ("外部数据"功能区上的标签);
  2. 选中要刷新的表格附近的复选框;
  3. 按"确定"按钮。

答案 10 :(得分:0)

就我而言,我只是改变了创建表格的方式,无意中更改了我试图查询的字段名称。确保您在查询中引用的字段名称实际存在于您要查询的表/查询中。

答案 11 :(得分:0)

如果您在定义联接的字段中有错字,也可能会弹出此消息

答案 12 :(得分:0)

感谢John Doe的解决方案提供了很多帮助。我的非常相似,使用TempVars

代替:

      strSQL = "SELECT * FROM Table1 WHERE Name = Forms!Table!Control;"

我用过:

      strSQL = "SELECT * FROM Query1"  , Query1 being common for other usage

Query1为:

 "Select Field1, Field2 from Table1 where Id= [TempVars]![MyVar]

同样,从视图中删除[TempVars]![MyVar]也解决了这个问题。

答案 13 :(得分:-1)

在我的情况下,我从TableB中插入了TableA(_,_,_)SELECT _,_,_的INSERT INTO,运行时错误33061是字段错误。正如@david所提到的。要么是字段错误:我在SQL语句中作为列名写的内容与TableA或TableB的实际访问表中的列名不匹配。

我也有类似@DATS的错误,但它是运行时错误3464。