MS Access运行Visual Basic SQL查询出现语法错误的解决方案咨询
问题修复指南
报错核心原因
你遇到的语法错误基本来自以下两类问题:
- 若
[Unique Key]为文本类型字段,拼接SQL时没有给字段值加单引号包裹,导致SQL语法结构断裂 - 若
DateChangeLog和Date_table的字段数量、字段顺序或字段类型不匹配,SELECT *插入时会触发语法校验报错
修复代码
根据你[Unique Key]的字段类型选择对应写法:
1. [Unique Key]为数字/自动编号类型
Private Sub Form_BeforeUpdate(Cancel As Integer) DoCmd.SetWarnings False ' Me.明确指向当前表单的字段,避免命名歧义 DoCmd.RunSQL "INSERT INTO DateChangeLog SELECT * FROM Date_table " & _ "WHERE [Unique Key] = " & Me![Unique Key] DoCmd.SetWarnings True End Sub
2. [Unique Key]为文本类型
Private Sub Form_BeforeUpdate(Cancel As Integer) DoCmd.SetWarnings False ' 文本值需要用单引号包裹 DoCmd.RunSQL "INSERT INTO DateChangeLog SELECT * FROM Date_table " & _ "WHERE [Unique Key] = '" & Me![Unique Key] & "'" DoCmd.SetWarnings True End Sub
补充优化建议
- 可以用
CurrentDb.Execute替代DoCmd.RunSQL,不需要手动开关警告,还能开启错误捕获:CurrentDb.Execute "INSERT INTO DateChangeLog SELECT * FROM Date_table WHERE [Unique Key] = " & Me![Unique Key], dbFailOnError - 如果你需要记录的是修改前的原始值,当前
BeforeUpdate事件里的写法取到的是修改后的数据,不符合变更日志的需求,可以调整为读取字段的OldValue属性,或者将日志插入逻辑移到Dirty事件中触发。
内容的提问来源于stack exchange,提问作者Elizabeth
相关产品推荐
相关产品推荐

