Sql INSERT INTO语句中的语法错误(错误3134)

Sql INSERT INTO语句中的语法错误(错误3134),sql,vba,ms-access,Sql,Vba,Ms Access,我正在使用MS Access 2013。我当前的问题是以下代码,我用来记录用户活动。 表名为:tbl activitylog,共有五列: id timestamps Username Activity Additional 我一个字符接一个字符地多次检查代码,不知道出了什么问题:( 调试打印显示: INSERT INTO tbl-activitylog(Username, Activity, Additional) VALUES('admin','Logon','System') 由于使用“

我正在使用MS Access 2013。我当前的问题是以下代码,我用来记录用户活动。 表名为:
tbl activitylog
,共有五列:

id
timestamps
Username
Activity
Additional
我一个字符接一个字符地多次检查代码,不知道出了什么问题:(

调试打印显示:

INSERT INTO tbl-activitylog(Username, Activity, Additional) VALUES('admin','Logon','System')
由于使用“-”,您必须以这种方式执行[tbl activitylog]

sql_code = "INSERT INTO [tbl-activitylog](Username, Activity, Additional) VALUES('" & TempVars("UserName").Value & "','" & Activity & "','" & Additional & "')"

此3134错误表示INSERT语句中存在语法错误。由于表名包含破折号,需要将其括在括号中:

INSERT INTO [tbl-activitylog]
    (Username, Activity, Additional)
    VALUES('admin','Logon','System')
一般来说,您最好将所有字段和表名括起来,以避免与冲突的所有风险,例如:


考虑参数化查询,这是在任何数据库中运行SQL的任何应用层语言的行业最佳实践。使用,您可以在MS Access中参数化查询

更多的MS Access将不允许您保存有语法问题的查询。因此,请确保使用方括号或倒勾转义特殊字符和保留字

SQL(以下另存为查询对象)

参数usernameparm Text、ActivityParam Text、AdditionalParam Text;
插入[tbl activitylog]([Username]、[Activity]、[Additional])
值([UsernameParam]、[ActivityParam]、[AdditionalParam])
VBA(参考上面的查询和绑定值,不带引号或连接)

TempVars(“用户名”).Value=“admin”
日志(“登录”、“系统”)
公共子日志记录(活动,附加为字符串)
Dim sql_代码作为字符串
Dim qdef作为QueryDef
Set qdef=CurrentDb.querydfs(“mySavedQuery”)
“绑定参数
qdef![UsernameParam]=临时变量(“用户名”)
qdef![ActivityParam]=活动
qdef![AdditionalParam]=附加
qdef.executedbfailonerror
设置qdef=Nothing
端接头

Try:INSERT-in[tbl activitylog]([Username]、[Activity]、[Additional])值('admin'、'Logon'、'System')使用[]作为表名和字段名。此外,更重要的是,使用参数而不是这样的字符串连接。
INSERT INTO [tbl-activitylog]
    (Username, Activity, Additional)
    VALUES('admin','Logon','System')
INSERT INTO [tbl-activitylog]
    ([Username], [Activity], [Additional])
    VALUES('admin','Logon','System')