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

Access前端连接MySQL/MariaDB遇写入冲突(3197错误)求解决

解决Access前端连接MariaDB/MySQL时的写入冲突(3197错误)问题

1. 完善时间戳字段的自动更新配置

你已设置timestamp非空且默认current_timestamp,但需补充自动更新规则:

  • 对MariaDB/MySQL 5.6+,修改字段定义为:timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    Access依赖这个自动更新机制判断记录是否被修改,缺少ON UPDATE CURRENT_TIMESTAMP会导致误判记录变更,触发冲突。

2. 确认所有表都设置了主键

Access对ODBC后端表强制要求主键:

  • 检查涉事表是否有明确主键(单一或复合主键均可),无主键的表会让Access无法正确识别和锁定记录,直接引发写入冲突。

3. 调整ODBC驱动的锁定与事务设置

打开MariaDB/MySQL ODBC数据源配置界面,修改以下选项:

  • 将读取锁定设为无或只读,避免不必要的记录锁定
  • 启用使用事务,并将事务隔离级别设为读取已提交(与SQL Server默认隔离级别一致)
  • 关闭自动提交,交给Access管理事务周期

4. 修改窗体的记录集与锁定属性

针对出现问题的连续窗体:

  • 打开窗体设计视图,在属性窗口将记录集类型从动态集改为动态集(不一致更新)
  • 把记录锁定属性设为无锁定或编辑记录时锁定,避免过度锁定引发冲突

5. 优化更新操作的SQL逻辑

如果是通过存储过程或查询更新数据:

  • 不要手动修改时间戳字段,交给数据库自动处理
  • 更新语句必须明确指定主键条件,减少Access对记录状态的误判,示例:
    UPDATE your_table SET column1 = ? WHERE primary_key = ?
    

6. 禁用Access的记录缓存

在问题窗体的VBA代码中添加如下内容,强制Access每次仅加载单条记录,避免缓存过期导致的冲突误判:

Private Sub Form_Load()
    Me.Recordset.CacheSize = 1
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:44:55