在我正在编写的应用程序中,当我使用VBA代码更改表单上复选框的值时,我收到了写冲突。我已经尝试将以下代码插入到VBA更改表单上任何对象的值的事件中:
If Me.Dirty Then
Me.Dirty = False
End If
但问题仍然存在 - 好像在我想通过手动操作改变任何东西之前没有保存记录。
以下是我遇到此问题的表单中的完整代码的一些示例:
更改空白定价复选框时的代码:
Private Sub chkSupAllowBlankPrice_AfterUpdate()
If Me.Dirty Then
Me.Dirty = False
End If
If (chkSupAllowBlankPrice.Value = True) Then
chkSupRequirePrice.Value = False
End If
End Sub
需要定价时的代码复选框:
Private Sub chkSupRequirePrice_AfterUpdate()
If Me.Dirty Then
Me.Dirty = False
End If
If (chkSupRequirePrice.Value = True) Then
chkSupAllowBlankPrice.Value = False
chkSupAllowBlankPrice.Visible = False
chkSupAllowBlankPrice.Enabled = False
chkSupAllowBlankPrice.Locked = True
lblSupAllowBlankPrice.Visible = False
Else
chkSupAllowBlankPrice.Visible = True
chkSupAllowBlankPrice.Enabled = True
chkSupAllowBlankPrice.Locked = False
lblSupAllowBlankPrice.Visible = True
End If
End Sub
不确定它是否有帮助,但表存储在SQL Server Express数据库中 - 因此标记。
- 编辑于05/29/2009 @ 1201小时 -
我已尝试将所有对象值更改注释掉,只留下可见,锁定和启用的更改 - 但我不断遇到写入冲突。我尝试在事件过程结束时输入Me.Dirty = False,我甚至尝试将其删除。到目前为止,每当我更改Require Pricing或Allow Blank Pricing时,我都会收到写入冲突,而VBA代码不会更改其他值。
- 2009年5月29日编辑@ 1318小时 -
这些复选框操作的字段 - 不会 - 在创建记录后接受任何更改,并在我尝试使用它们时生成写入冲突。现在我完全糊涂了,想着把一切都搞砸了,重新开始。
- 编辑于06/01/2009 @ 1209小时 -
经过调查,似乎服务器上为所涉及的表定义了许多检查约束,我无法删除。有些事情导致链接表总是报告脏,即使项目没有被更改 - 我认为Access和SQL正在使用默认值来解决它。我将擦除所有表格,删除所有信息,然后重新开始我的设计,因为检查约束似乎无法移除而不会丢弃表格。感谢大家的帮助,可以关闭这个问题 - 将问题引用到这个新问题(Updates to Records not allowed - Write Conflict)?
- 编辑于06/03/2009 @ 1307小时 -
从其他问题交叉发布,下面描述了解决所有奇怪的解决方案。感谢所有与我一起开拓此事的人,我真的很有帮助。我发现使用Yes / No复选框和带有Access的SQL Server时会出现一个奇怪的问题。显然,Access会将NULL解释为否 - 更改值,但SQL Server不会将NULL解释为位字段中的“否”(转换中的“是/否”),因此当值不是时会抛出“写入冲突”错误必需,并且为NULL。解决方案是重新设计表,以便需要一个值,并为每个以前的Yes / No复选框分配一个默认值。这解决了神秘的Write Conflict消息,并允许在创建记录后对记录进行更改。
答案 0 :(得分:1)
一些评论:
在更改其他字段的值之前保存表单的数据(设置Dirty=false
)是否有任何特殊原因(这会使表单再次变脏)?
我首先要更改其他字段的数据然后保存表单的数据,否则表单总是很脏。
从代码更改控件的值不会调用他们的事件,因此从chkSupRequirePrice
更改chkSupAllowBlankPrice_AfterUpdate()
的值不会调用chkSupRequirePrice_AfterUpdate()
。
不要将特定代码放入每个事件中,最好将所有内容重组为相同的,例如,从每个事件处理程序调用的Update()
子。
它将使您更容易管理代码及其副作用,因为它是始终调用的相同代码段。
话虽如此,您的代码应该正常工作,所以我猜测问题来自代码中的其他地方。
如果已经打开相同的记录以便在别处进行编辑,则会发生写入冲突
您可以使用锁定类型,看看它是否有任何改变。
要查看问题是否与您的SQL Server设置确实相关,请尝试取消链接表,然后将其复制到本地Access数据库,以查看在处理本地Access时是否仍然遇到此问题表
答案 1 :(得分:0)
过去,如果SQL Server链接表没有主键,我在Access中遇到了一些奇怪的问题。如果您的表没有主键,则它不知道要更新哪个记录。我知道我曾经收到类似的消息,但是几年前,我不知道这是不是你的问题。
答案 2 :(得分:0)
Access如何处理是/否复选框值与SQL Server之间存在差异。将Access / No布尔值从Access转换为SQL Server时,您必须记住定义默认状态并将其标记为需要答案。否则,每次都会出现写入冲突,并且一旦设置了初始值,就会阻止记录与您的更改一起保存。