我将下面的代码分配给了命令按钮。
返回错误(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)"
要在[MS0]中运行操作查询的multiple ways中,对于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
在列列表中:
(Aanmaakdatum, VerlofDatum, VerlofReden, Aantal, me.VerlofPoule, Notitie, Status)
me.VerlofPoule
是什么?这不是列名,对吗?将其更改为正确的列名称。
我在this question中发现错误3061是“”运行时错误'3061'。参数太少。”根据该问题的答案,插入列名称可能是错误的。
看起来查询中有一个名为me.VerlofPoule
的列。这也是应该在此列中输入的值。也许这应该是其他列的名称?
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]