在我正在编写的应用程序中,当我使用 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 数据库中 - 因此是标签。
-- 编辑于 2009 年 5 月 29 日 @ 1201 小时 --
我尝试注释掉所有对象值更改,只留下可见、锁定和启用的更改 - 但我不断收到写入冲突。我尝试将 Me.Dirty = False 放在事件过程的末尾,甚至尝试将其删除。到目前为止,每当我更改“要求定价”或“允许空白定价”时,我都会遇到写入冲突,而 VBA 代码不会更改其他值。
-- 编辑于 2009 年 5 月 29 日 @ 1318 小时 --
一旦创建记录,这些复选框操作的字段将不接受任何更改,每当我尝试使用它们时都会产生写入冲突。现在我完全糊涂了,想把所有东西都毁掉,然后重新开始。
-- 编辑于 06/01/2009 @ 1209 小时 --
经过调查,似乎在服务器上为所涉及的表定义了许多我无法删除的检查约束。即使项目没有更改,某些东西也会导致链接表总是报告脏表——我认为 Access 和 SQL 正在使用默认值来解决这个问题。我将擦除所有表,删除所有信息,然后重新开始我的设计,因为检查约束似乎不能在不删除表的情况下删除。谢谢大家的帮助,这个问题可以关闭吗 - 将问题提交给这个新问题(不允许更新记录 - 写入冲突)?
-- 编辑于 06/03/2009 @ 1307 小时 --
从其他问题交叉发布,下面描述的所有好奇的解决方案。感谢所有与我一起努力走到这一步的人,我真的很感谢你的帮助。我发现在使用 Yes/No 复选框和 SQL Server with Access 时会出现一个奇怪的问题。显然,Access 会将 NULL 解释为否 - 更改值,但 SQL Server 不会将 NULL 解释为位字段中的否(是/否在转换中变成了),因此当值不是时它会引发写入冲突错误必需,并且为 NULL。解决方案是重新设计表格,以便需要一个值,并且为之前的每个“是/否”复选框分配了一个默认值。这解决了神秘的写入冲突消息,并允许在创建记录后对其进行更改。