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