MS Access - “自从您开始编辑以来,该记录已被其他用户更改”

问题描述 投票:0回答:2

我知道这个问题已经被问过很多次了,我已经尝试了许多对其他人有用的建议和解决方案,但我无法消除这个错误(请参阅附件)。 Write Conflict Screenshot

这是一个 Access 应用程序,实际上只是 SQL Server 数据库的 UI,并使用 SQL Server 数据库的所有链接表。 用户打开访问权限,然后转到打开“搜索”的表单,用户在其中选择一系列条件并单击“应用过滤器”。 将出现符合条件的记录列表。 他们单击所需的记录,然后打开一个表单,显示有关该记录的详细信息。 然后,他们单击“编辑”按钮,打开另一个表单,允许他们编辑某些字段。 当他们进行更改并点击“保存”时,就会出现此错误。 对我来说奇怪的是,只有当用户选择搜索列表中的第一条记录时才会发生这种情况,但列表中的其他记录似乎不会发生这种情况。

我尝试过以下方法:

  1. 在“BeforeUpdate”和“Update Button Click”事件上添加了代码以检查“If Me.IsDirty = True then Me.IsDirty = false”End If。
  2. 向 SQL 数据库添加了一个日期时间列,该列通过 UPDATE 触发器进行更新
  3. 验证数据库没有位列
  4. 将表单上的“记录锁定”属性更改为“编辑记录”

这些项目都没有产生影响。

任何有关可能导致此问题的原因的帮助都会受到赞赏。

vba ms-access
2个回答
1
投票

2。向 SQL 数据库添加了一个日期时间列,该列通过 UPDATE 触发器进行更新

这实际上可能是您的问题的原因 - Access 和 Sql Server 同时修改同一行会导致您看到的写入冲突。
恐怕您误解了您找到的有效建议。

您想要的是 Sql Server 表中的

ROWVERSION
又名
TIMESTAMP
列。这有助于 Access 确定行是否已更改并解决写入冲突。它是全自动的,无需触发。

更多详细信息(Albert 总是提供很多详细信息:p)在这里:
MS Access 写入冲突 - SQL Server - Me = 脏

如果这没有帮助:检查您是否有任何其他触发器,并发布您的 VBA 代码以进行过滤/编辑/保存。


0
投票

与上述相关,我花了几天时间才找到这个,但我也遇到了这个错误,涉及到我的日期/时间字段,默认约束为 getdate()。我有许多带有日期/时间字段的 SQL 表,它们都具有此默认值。我发现,当打开具有毫秒日期/时间值的表进行编辑时,MS Access 将抛出此错误(我假设 MS Access 不喜欢毫秒,并且正在更新打开的记录集以删除它们)。为了避免这个问题(对于不需要毫秒的数据),我从现有行中删除了毫秒并将默认约束更改为以下内容:

默认(dateadd(毫秒,-datepart(毫秒,getdate()),getdate()))

© www.soinside.com 2019 - 2024. All rights reserved.