谁能帮我处理我的SQL语句?

时间:2019-12-30 20:24:19

标签: sql ms-access access-vba

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

当我执行它时,它返回一个错误(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)"

有人可以协助我吗?

4 个答案:

答案 0 :(得分:2)

要在MS Access VBA中运行操作查询的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

答案 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]