在 Database.Execute 中传递值返回错误 3061
Posted
技术标签:
【中文标题】在 Database.Execute 中传递值返回错误 3061【英文标题】:Passing values in Database.Execute returns an error 3061 【发布时间】:2019-12-30 20:24:19 【问题描述】:我将下面的代码分配给一个命令按钮。
它返回一个错误 (3061)。
CurrentDb.Execute "INSERT INTO tblVerlof(Aanmaakdatum, VerlofDatum, VerlofReden, Aantal, me.VerlofPoule, Notitie, Status)VALUES(now(), me.startdatum, 2, me.txturen, me.verlofpoule, me.txttitel, 2)"
【问题讨论】:
您应该在问题中包含完整的错误消息。当然,请查看该错误的含义。看来这是您应该能够自己获得的。 这能回答你的问题吗? Run-time error '3061'. Too few parameters. Expected 1. (Access 2007) 【参考方案1】:multiple ways 在 MS Access VBA 中运行操作查询,对于Database.Execute
,您不能直接在 SQL 中传递表单值,应避免将 VBA 中的值连接到 SQL 中。
相反,考虑使用DoCmd.OpenQuery
或QueryDefs.Execute
将表单控件参数化为SQL 语句:
DoCmd.OpenQuery 方法
SQL (另存为查询对象)
INSERT INTO tblVerlof(Aanmaakdatum, VerlofDatum, VerlofReden, Aantal,
VerlofPoule, Notitie, Status)
VALUES(NOW(), Forms!myform!startdatum, 2, Forms!myform!txturen,
Forms!myform!verlofpoule, Forms!myform!txttitel, 2)
VBA (无需关闭操作查询)
DoCmd.OpenQuery "mySavedQuery"
QueryDefs.Execute 方法
SQL(保存为查询对象,PARAMETERS
子句在Access SQL中有效)
PARAMETERS prm_startdatum Date, prm_txturen Text,
prm_verlofpoule Text, prm_txttitel Text;
INSERT INTO tblVerlof(Aanmaakdatum, VerlofDatum, VerlofReden, Aantal,
VerlofPoule, Notitie, Status)
VALUES(NOW(), prm_startdatum, 2, prm_txturen,
prm_verlofpoule, prm_txttitel, 2)
VBA
Dim qdef As QueryDef
Set qdef = CurrentDb.QueryDefs("mySavedQuery")
qdef!prm_startdatum = Me.startdatum
qdef!prm_txturen = Me.txturen
qdef!prm_verlofpoule = Me.verlofpoule
qdef!prm_txttitel = Me.txttitel
qdef.Execute
Set qdef = Nothing
【讨论】:
【参考方案2】:在列列表中:
(Aanmaakdatum, VerlofDatum, VerlofReden, Aantal, me.VerlofPoule, Notitie, Status)
什么是me.VerlofPoule
?
这不是列名,对吧?
将其更改为正确的列名。
【讨论】:
【参考方案3】:我在this question 中发现错误 3061 是“”运行时错误 '3061'。参数太少。”根据该问题的答案,插入列名可能是错误的。
查询似乎有一个名为me.VerlofPoule
的列。这也是应该进入此列的值。也许这应该是不同列的名称?
【讨论】:
【参考方案4】:insert
语句中的第五列不是有效的字段名称:
CurrentDb.Execute "INSERT INTO tblVerlof(Aanmaakdatum, VerlofDatum, VerlofReden, Aantal, me.VerlofPoule, Notitie, Status)VALUES(now(), me.startdatum, 2, me.txturen, me.verlofpoule, me.txttitel, 2)"
This field -----^
如果字段名称由表单上VerlofPoule
控件保存的值表示,则需要连接字段名称,因为在执行 SQL 语句时不会对其进行评估。
同样,values
子句中的 Me.XXX
项也不会被计算,相反,您应该使用参数或使用以下语法引用表单控件:Forms![YourForm]![YourControl]
【讨论】:
以上是关于在 Database.Execute 中传递值返回错误 3061的主要内容,如果未能解决你的问题,请参考以下文章