Access对话框窗体打开后记录锁定无法编辑问题求助
问题分析与解决
核心原因
你的代码在DAO记录集的**编辑状态(从.Edit到.Update的区间)**内打开了对话框窗体(acDialog)。由于对话框会阻塞代码执行,此时原记录集的编辑事务未完成,导致目标窗体的记录被锁定,无法修改。而acWindowNormal模式不会阻塞代码,编辑事务能正常完成,所以没有锁定问题。
另外,你的代码里的.Edit和.Update块没有修改任何字段值,这部分操作完全多余,反而会引发锁定问题。
解决方案
移除不必要的.Edit和.Update操作,将打开对话框的逻辑放在记录集的非编辑状态下执行,修改后的代码如下:
Me.Form.Dirty = False Dim rs As DAO.Recordset Set rs = Me.RecordsetClone With rs .MoveFirst Do While Not rs.EOF ' 移除无意义的编辑操作,直接判断条件 If (!Tahvil_Tmp = True) And (!Az_Tankhah = False) Then If DLookup("[Saff_Arzyabi_2]", "Arzyabi_Tamin_Konande_sh", _ "val([Cod_Tamin_Konande]) = '" & !Cod_Tamin_Konande & "'") = True Then DoCmd.OpenForm "Arzyabi_Tamin_Konande_da", acNormal, , "[Cod_Tamin_Konande]=" & !Cod_Tamin_Konande, , acDialog End If End If .MoveNext Loop End With
额外优化建议
- 用
And替代*作为逻辑与运算符:VBA中*是算术乘法,虽然布尔值会被转成0/1计算,但And更符合逻辑判断的语义,可读性更强。 - 如果
Cod_Tamin_Konande是数值类型,DLookup的条件可以去掉单引号,避免类型转换问题:"val([Cod_Tamin_Konande]) = " & !Cod_Tamin_Konande
内容的提问来源于stack exchange,提问作者arminzf
相关产品推荐
相关产品推荐

