Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 运行时错误“3061”。参数太少。预期1。(访问2007)_Ms Access_Vba - Fatal编程技术网

Ms access 运行时错误“3061”。参数太少。预期1。(访问2007)

Ms access 运行时错误“3061”。参数太少。预期1。(访问2007),ms-access,vba,Ms Access,Vba,我有以下“设置记录集”行,无法使用。根据我能找到的有关该主题的所有可用帮助,参数似乎是正确的 错误显示为: 运行时错误“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 A

我有以下“设置记录集”行,无法使用。根据我能找到的有关该主题的所有可用帮助,参数似乎是正确的

错误显示为:


运行时错误“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原因,但没有效果,并且在双引号之间使用单引号,但没有乐趣


非常感谢。

确保[qry\u all\u details]存在并可运行。我怀疑它或它使用的任何查询都缺少该参数。

该查询是否有超过参数siteID的内容,因为如果要运行查询,其中一个参数仍然没有填写,这会给您带来错误

运行时错误“3061”。参数太少。预期1


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

我的问题是,我更改了一个表,添加了一个名为Char的列。
由于这是一个it所需的方括号,所以在更新新创建的列之前,单引号或双引号对于alter语句的工作来说是不好的。

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

希望它能对您有所帮助。

您有:

WHERE ID = " & siteID & ";", dbOpenSnapshot)
你需要:

WHERE ID = "'" & siteID & "';", dbOpenSnapshot)
请注意额外的报价“。每次都是这样


编辑:添加了缺少的双引号

我的问题也通过变量名周围的单引号解决了

我得到了类似以下内容的相同错误:

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

我通过将Query1替换为Query2解决了这个错误。在我的例子中,当我尝试在查询中使用一个新列时,出现了这个错误,我将该列添加到链接到MS Access的MySQL表中,但没有在MS Access中刷新它

要刷新链接的远程表,请执行以下操作:

打开功能区上的“链接表管理器外部数据”选项卡; 选中要刷新的表附近的复选框; 按OK按钮。
在我的例子中,我只是简单地更改了创建表的方式,无意中更改了试图查询的字段名。确保您在查询中引用的字段名称实际存在于您正在查询的表/查询中。

适用于阅读所有答案的人。我的情况就是,我使用格式表单创建了一个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)

在我的例子中,有一个INSERT到TableA,从TableB中选择,运行时错误33061是一个字段错误。正如@david提到的。要么是字段错误:对于TableA或TableB,我在SQL语句中作为列名编写的内容与实际访问表中的列名不匹配


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

如果您定义连接的字段中有输入错误,也可能会弹出此消息。

感谢John Doe的解决方案,它帮了大忙。我的非常相似,但有一些不同,使用了tempvar

而不是:

      strSQL = "SELECT * FROM Table1 WHERE Name = Forms!Table!Control;"
我用过:

      strSQL = "SELECT * FROM Query1"  , Query1 being common for other usage
问题1为:

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

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

您打开的是参数化查询吗?也许它需要一个值…不确定它是否值得注意,但您的一行代码,至少在您输入它时,占用了两行。这是正确的还是仅仅是此处的格式设置?参数太少,预期为X意味着您将在SQL语句中使用的X字段名不可用。大多数情况下,手工写下SQL代码行时会出现打字错误,大多数情况下,当您使用的是可以有多个版本的DBs时,一个DB有这些字段,一个DB没有。我更喜欢用一个简单的代码来检查这些字段是否可用:Char是Access中的保留字,如Date、Time、Now和其他函数当您在SQL查询中为所有字段使用括号时,您就可以开始了