中等:需要基本的宏、编码和互操作性技能。本文适用于 Microsoft 访问数据库 (.mdb) 和 Microsoft 访问项目 (.adp)。
症状
当您编辑使用多个具有相同记录源的窗体的数据时,您可能会收到以下错误消息:
自您开始编辑此记录以来,其他用户已更改该记录。如果保存记录,将覆盖其他用户所做的更改。 将更改复制到剪贴板将允许您查看其他用户输入的值,然后在决定进行更改时将更改粘贴回。
然后,您可以单击以下三个按钮之一:
-
保存记录
-
复制到剪贴板
-
删除更改
原因
当您打开两个同时更新同一数据源的窗体时,将发生此行为。第一个窗体在记录或记录上放置编辑锁,然后第二个窗体更改记录或记录并保存更改。当第一个窗体尝试关闭并写回表时,将检测到第二个窗体所做的更改。这将导致返回错误。
解决方案
要解决此问题,请使用为 Microsoft Access 数据库 (.mdb) 文件列出的两种方法之一,或者使用 Access 项目 (.adp) 文件列出的方法之一。
对于微软访问数据库 (.mdb) 文件
方法 1
将窗体的"记录锁定"属性设置为"已编辑的记录"。为此,请按照以下步骤操作:
-
在"设计视图"中打开窗体。备注在 Access 2007 中,转到步骤 3。
-
在"视图"菜单上,单击"属性"。
-
在"数据"选项卡上,将"记录锁定"属性更改为"已编辑的记录"。
方法 2
将代码添加到两个窗体的 OnDeactivate 事件过程以保存记录。为此,请按照以下步骤操作:
-
在"设计视图"中打开窗体。备注在 Access 2007 中,转到步骤 4。
-
在"视图"菜单上,单击"属性"。
-
在"编辑"菜单上,单击"选择窗体"。
-
在"事件"选项卡上,右键单击On 停用属性框中,然后单击"生成"。
-
在"选择生成器"框中,单击"代码生成器",然后单击"确定"。
-
键入或粘贴以下代码:
DoCmd.RunCommand acCmdSaveRecord
-
在"设计"视图中打开第二个窗体,然后重复步骤 2 到 6。
对于微软访问项目 (.adp) 文件:
将代码添加到两个窗体的 OnDeactivate 和 OnActivate 事件过程以保存记录。为此,请按照以下步骤操作:
-
在"设计视图"中打开窗体。备注在 Access 2007 中,转到步骤 4。
-
在"视图"菜单上,单击"属性"。
-
在"编辑"菜单上,单击"选择窗体"。
-
在"事件"选项卡上,右键单击On 停用属性框中,然后单击"生成"。
-
在"选择生成器"框中,单击"代码生成器",然后单击"确定"。
-
键入或粘贴以下代码:
DoCmd.RunCommand acCmdSaveRecord
-
在"文件"菜单上,单击"关闭"并返回到"微软访问"。
-
在"事件"选项卡上,右键单击OnActivate属性框中,然后单击"生成"。
-
在"选择生成器"框中,单击"代码生成器",然后单击"确定"。
-
键入或粘贴以下代码:注意本文中的示例代码使用 Microsoft ActiveX 数据对象。要正确运行此代码,必须引用 Microsoft ActiveX 数据对象 2.x 库(其中 2.x 为 2.1 或更高版本)。为此,请单击"可视化基本编辑器"中的"工具"菜单上的"参考",并确保选中Microsoft ActiveX 数据对象 2.x 库复选框。
Dim rs As ADODB.RecordsetSet rs = Me.Recordset.Cloners.Bookmark = Me.BookmarkDoCmd.RunCommand acCmdRefreshMe.Bookmark = rs.Bookmarkrs.CloseSet rs = Nothing
-
在"设计"视图中打开第二个窗体,然后重复步骤 2 到 10。
更多信息
在 Access 2003 中重现行为的步骤
-
打开访问。
-
在"帮助"菜单上,指向示例数据库,然后单击"北风示例数据库"。
-
在"数据库"窗口中,单击"对象"下的"表",然后单击"员工"表。
-
在"插入"菜单上,单击"自动填写"。
-
将表单另存为frmNew 员工。
-
打开"员工"窗体,然后将"名字"字段更改为"南希1"。
-
打开 frmNew 雇员窗体,然后将"名字"字段更改为Nancy2。
-
关闭 frmNew 员工窗体。
-
关闭"员工"窗体。请注意,您会收到本文"症状"部分中提到的"写入冲突"消息。
有关其他信息,请单击以下文章编号以查看 Microsoft 知识库中的文章:
304181关闭窗体时意外写入冲突错误
280730 ACC2000:当您尝试更新链接的 SQL Server 表中的记录时写入冲突错误