宏中的 Access 2010 SQL 错误

Posted

技术标签:

【中文标题】宏中的 Access 2010 SQL 错误【英文标题】:Access 2010 SQL error in macro 【发布时间】:2011-11-03 16:30:50 【问题描述】:

作为一个班级项目,我正在创建一个用于跟踪库存的 Access 2010 数据库。对于这个问题,有两个相关的表格,资产和操作,以及一个相关的表格,更新资产。我的目标是每次有人更新 Assets 表中的记录时,将一条新记录插入到 Actions 表中。新的 Actions 记录将包含保存时当前记录中包含的字段的快照。

更新资产表单有一个名为 AuditLog 的宏附加到 After Update 事件。该宏使用带有以下参数的 RunSQL 命令:

SQL 语句:

INSERT INTO Actions (AssetTag, LocationID,Slot,Status,Timestamp,TechID) ; 
SELECT(AssetTag,LocationID,Slot,Status,LastUpdated,TechID) FROM Assets WHERE 
   Assets!AssetTag = Me!AssetTag ;

使用交易:

但是,当我去保存记录时,我收到以下错误:

INSERT INTO 语句中的语法错误

宏名称:AuditLog

动作名称:RunSQL

参数:INSERT INTO Actions (AssetTag, LocationID,Slot,Status,Timestamp,TechID) ; SELECT (AssetTag,LocationID,Slot,Status,LastUpdated,TechID) FROM Assets WHERE Assets!AssetTag = Me!AssetTag ;, 是的

错误号:2950

我已将包含数据库的文件夹添加到 Access 的受信任位置列表中。访问绝对不是我的强项,因此我们将不胜感激。

【问题讨论】:

【参考方案1】:

这也不是我的强项,但我敢打赌,分号是表达式/语句的结尾,就像 SQL Server 一样,它应该是复合语句 (select...into)

因此,删除第一个分号。

INSERT INTO 操作(AssetTag、LocationID、Slot、Status、Timestamp、TechID) SELECT(AssetTag,LocationID,Slot,Status,LastUpdated,TechID) FROM Assets WHERE 资产!资产标签 = 我!资产标签;

【讨论】:

【参考方案2】:

分号“完成”语句。基本上你在那里做的是在 INSERT INTO Actions (AssetTag, LocationID,Slot,Status,Timestamp,TechID) 处切断你的陈述;

为了将来参考,您几乎不需要在访问中使用分号。它可能会为您添加它,但为了避免这样的事情,请不要添加它。

【讨论】:

【参考方案3】:

正如其他人所建议的那样,分号是罪魁祸首。如果 \ 当您的 Access SQL 语句将来出现问题时,您可以将该语句粘贴到 Access 查询设计器中。这样做将使查询设计器为您找到问题(通过突出显示存在语法问题的代码)。

【讨论】:

以上是关于宏中的 Access 2010 SQL 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Microsoft Access 2010 数据宏中使用变量数据

Access 2010 中的 SQL 错误

Access 2010 中的 INSERT INTO 语句中出现 SQL 语法错误

Access 2010:查询表达式中的语法错误(缺少运算符)

Access 2010:加入三个表,未知错误

Access 2010 和 SQL Server 2008 R2 错误 3157 超时