如何解决与未绑定访问表单

时间:2016-08-24 18:36:31

标签: ms-access access-vba

已经搜索过,还没有找到一个似乎合适的解决方案。也许这里有人可以提供一些想法。

背景

在MS Access 2010中构建的应用程序,其表格链接到Access 2010数据库,最终可能会链接。

表单包含“编辑”部分(未绑定)和“列表”部分(绑定子表单)。

在整个应用程序中使用了这种类型的许多形式。

所有表单都使用通用UpsertRecord()方法根据各自的字段插入/更新记录。

问题

单击“保存”按钮时,将显示“写入冲突”错误。

  

写冲突

     

自您开始编辑以来,其他用户已更改此记录。如果保存记录,则将覆盖其他用户所做的更改。   将更改复制到剪贴板将允许您查看其他用户输入的值,然后在您决定进行更改时将更改粘贴回来。

触发错误的行是表单recordsource设置为SQL字符串的地方。

.RecordSource = strSQL

我的解释

虽然表单可以直接更新底部子表单而不点击“保存”,但这不足以避免用户无意中更改数据。

所以,我试图通过点击事件强制“保存”,而点击事件又调用公共公共UpsertRecord()方法来保存数据。该方法工作正常,但是会触发Write Conflict,因为表单认为它也在单独更改数据(没有'保存'点击)。

尝试的解决方案

我尝试设置一个私有变量m_SaveOK,以防止使用带有下面代码的Form_BeforeUpdate()事件而无需单击按钮事件,但这也会触发写冲突。

If Not m_SaveOK Then
    Cancel = True
End If

还尝试在执行qry.SQL直接保存之前保存表单数据,但是这也失败了。该代码基本上是在直接保存之前检查脏并使用frm.Dirty = False强制保存表单。

If frm.Dirty Then
    frm.Dirty = False
End If

表单图片

这就是表格的样子。单击子窗体中记录的铅笔(编辑)按钮将填充顶部控件。

单击“保存”按钮时,记录将保存到数据库中,并重新获取表单以刷新子表单列表。

Unbound edit form with bound subform list

无论如何,我很欣赏有关如何防止表单尝试保存记录与Save按钮点击事件的一些想法。

提前感谢您的帮助!

更新

子窗体属性设置为不允许添加和编辑(删除是可以的,因为这是列表中'X'按钮的用途),并且没有设置锁定。

在添加一些评估debug.printfrm.Dirty的{​​{1}}语句之后,我将其缩小为主要形式,而子格式为frm.subform.Form.Dirty并导致冲突。

使用“保存”按钮正确更新底层表,但表单仍为Dirty。因此,虽然我目前没有触发Dirty错误,但Write Conflict状态会导致其他错误&在按钮触发保存后添加Dirty时,表单退出时出现不良行为 - You can't save this record at this time...2101 The setting you entered isn't valid for this property.

所以我仍然在解决这个问题,并希望得到任何其他想法。

1 个答案:

答案 0 :(得分:1)

对于子表单,属性Allow Additions, Allow Deletions, Allow Edits 应该设置为No,Record Locks设置为No Locks。这样子表单就不应该再干扰了。