在Database.Execute中传递值将返回错误3061

问题描述 投票:-2回答:4

我将下面的代码分配给了命令按钮。

返回错误(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)"
sql ms-access access-vba
4个回答
2
投票

要在[MS0]中运行操作查询的multiple ways中,对于Database.Execute,您不能直接在SQL中传递表单值,并且应避免将VBA中的值连接到SQL中。

相反,请考虑使用DoCmd.OpenQueryQueryDefs.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

0
投票

在列列表中:

(Aanmaakdatum, VerlofDatum, VerlofReden, Aantal, me.VerlofPoule, Notitie, Status)

me.VerlofPoule是什么?这不是列名,对吗?将其更改为正确的列名称。


0
投票

我在this question中发现错误3061是“”运行时错误'3061'。参数太少。”根据该问题的答案,插入列名称可能是错误的。

看起来查询中有一个名为me.VerlofPoule的列。这也是应该在此列中输入的值。也许这应该是其他列的名称?


0
投票

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语句时不会对其进行评估。

类似地,Me.XXX子句中的values项目也不会被求值,相反,您应该使用参数或使用以下语法引用表单控件:Forms![YourForm]![YourControl]

© www.soinside.com 2019 - 2024. All rights reserved.