You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行INSERT语句插入incidentlog表时遇Error 3075,求排查

Access VBA插入数据触发Error 3075的原因分析

执行VBA生成的INSERT语句向incidentlog表插入数据时触发运行时错误Error 3075,Debug.Print输出的SQL语句看似正常,但实际存在语法问题。

涉及的VBA代码

mySQL = "INSERT INTO incidentlog (mon, yr, observation) VALUES (" & Me.Combo37.Column(0) & ", " & Me.Combo39.Column(0) & ", " & Me.Combo10.Column(0) & ": " & Me.Text12 & "" & vbCrLf & "--" & Me.Combo35 & "" & Me.Combo37 & "" & Me.Combo39 & "/" & Me.Combo18 & "/" & Me.Text16 & "/COR " & Me.Text21 & " " & Me.Combo25.Column(2) & ")"
Debug.Print mySQL
DoCmd.RunSQL mySQL

字段类型说明

其中combo35、combo39、text16为数值型字段。

Debug输出的SQL示例

INSERT INTO incidentlog (mon, yr, observation) VALUES (Jan, 2022, PO-02: EDITED OUT.
--01Jan2022/EDITED OUT/0700/COR my notes here USER)

错误原因分析

  • 字符串型字段未用单引号包裹:
    SQL语法要求字符串类型的字段值必须用单引号'括起来。从输出的SQL可以看到,mon的Jan、observation的长文本内容都没有加单引号,数据库会把Jan误识别为字段名或关键字,直接触发语法错误。
  • SQL语句包含换行符:
    VBA代码里用了vbCrLf生成换行,虽然Debug显示正常,但数据库解析SQL时,换行符会破坏语句的连续性,导致语法解析失败。
  • 字段值包含SQL注释符号:
    observation字段值里的--是SQL的单行注释标记,数据库会将--之后的内容视为注释,导致observation的取值不完整,语句逻辑断裂。

修正建议

推荐用参数化查询彻底避免这类语法问题,或者手动处理字符串:

  1. 给所有字符串字段值添加单引号;
  2. 替换字段值中的单引号为两个单引号(避免转义错误);
  3. 移除换行符或替换为空格;
  4. 转义或移除SQL注释符号。

示例修正代码:

' 处理字符串特殊字符
Dim obsContent As String
obsContent = Me.Combo10.Column(0) & ": " & Me.Text12 & "--" & Me.Combo35 & Me.Combo37 & Me.Combo39 & "/" & Me.Combo18 & "/" & Me.Text16 & "/COR " & Me.Text21 & " " & Me.Combo25.Column(2)
obsContent = Replace(obsContent, "'", "''") ' 转义单引号
obsContent = Replace(obsContent, vbCrLf, "") ' 移除换行

' 生成正确的SQL语句
mySQL = "INSERT INTO incidentlog (mon, yr, observation) VALUES ('" & Me.Combo37.Column(0) & "', " & Me.Combo39.Column(0) & ", '" & obsContent & "')"
Debug.Print mySQL
DoCmd.RunSQL mySQL

内容的提问来源于stack exchange,提问作者user2002716

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:21:01