【发布时间】:2010-10-29 16:36:03
【问题描述】:
在我正在编写的应用程序中,当我使用 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 放在事件过程的末尾,甚至尝试将其删除。到目前为止,每当我更改 Require Pricing 或 Allow Blank Pricing 时,我都会遇到写入冲突,而 VBA 代码不会更改其他值。
-- 编辑于 05/29/2009 @ 1318 小时--
一旦创建记录,这些复选框操作的字段将不接受任何更改,每当我尝试使用它们时都会产生写入冲突。现在我完全糊涂了,想把所有东西都毁了,然后重新开始。
-- 编辑于 06/01/2009 @ 1209 小时--
经过调查,似乎在服务器上为所涉及的表定义了许多我无法删除的检查约束。即使项目没有更改,某些东西也会导致链接表总是报告脏表——我认为 Access 和 SQL 正在使用默认值来解决这个问题。我将擦除所有表,删除所有信息,然后重新开始我的设计,因为无论如何不删除表,检查约束似乎都无法删除。谢谢大家的帮助,这个问题可以关闭吗 - 将问题提交给这个新问题(Updates to Records not allowed - Write Conflict)?
-- 编辑于 06/03/2009 @ 1307 小时--
从其他问题交叉发布,下面为所有好奇的人描述了解决方案。感谢所有与我一起努力走到这一步的人,我真的很感谢你的帮助。我发现在使用 Yes/No 复选框和 SQL Server with Access 时会出现一个奇怪的问题。显然,Access 会将 NULL 解释为否 - 更改值,但 SQL Server 不会将 NULL 解释为位字段中的否(是/否在转换中变成了),因此当值不是时它会引发写入冲突错误必需,并且为 NULL。解决方案是重新设计表格,以便需要一个值,并且为之前的每个“是/否”复选框分配了一个默认值。这解决了神秘的写入冲突消息,并允许在创建记录后对其进行更改。
【问题讨论】:
-
写冲突是什么意思?如果没有这段代码,它会按您的预期工作吗?
-
如果没有此代码,无论何时更改空白定价或要求定价的值 - 在编辑一个后立即出现一个写入冲突对话框(导致另一个字段被 VBA 代码更改)强制将更改写入剪贴板,或删除更改。
标签: sql-server ms-access vba null default-value