MS Access:关闭表单后表仍被锁定,无法删除重建快照表
解决Access删除表时“被其他用户或进程占用”的问题
以下是除关闭主表单外,需执行的解锁操作:
显式清理子表单的记录集
关闭主表单后,子表单的记录集可能仍在内存中残留并锁定表。建议在关闭主表单前,先主动关闭并释放子表单的记录集:' 假设主表单名为frmMain,子表单控件名为subSnapshot If Forms!frmMain!subSnapshot.Form.Recordset.State <> dbClosed Then Forms!frmMain!subSnapshot.Form.Recordset.Close End If Set Forms!frmMain!subSnapshot.Form.Recordset = Nothing ' 再关闭主表单 DoCmd.Close acForm, "frmMain"关闭关联的查询对象
子表单依赖的查询可能在后台保持打开状态,需显式关闭:Dim qdf As DAO.QueryDef On Error Resume Next Set qdf = CurrentDb.QueryDefs("子表单使用的查询名") If Not qdf Is Nothing Then qdf.Close Set qdf = Nothing End If On Error GoTo 0重置当前数据库连接
内存中的数据库连接残留可能导致锁定,重置连接可清除这些残留:Dim db As DAO.Database Set db = CurrentDb db.Close Set db = Nothing ' 重新建立数据库连接 Set db = OpenDatabase(CurrentDb.Name)关闭所有隐藏的打开对象
检查是否有隐藏的表单、查询或报表在后台运行,用代码批量关闭:' 关闭所有隐藏表单 Dim frm As Access.Form For Each frm In Forms If Not frm.Visible Then DoCmd.Close acForm, frm.Name End If Next frm ' 关闭所有打开的查询 Dim qry As Access.Query For Each qry In Queries DoCmd.Close acQuery, qry.Name Next qry Set frm = Nothing Set qry = Nothing压缩修复数据库(应急方案)
如果以上操作都无效,关闭数据库后执行压缩修复,清除残留的锁定信息:' 先关闭所有对象并退出Access Application.Quit acQuitSaveAll ' 调用Access命令行执行压缩修复 Shell "msaccess.exe """ & CurrentDb.Name & """ /compact """ & CurrentDb.Name & """", vbNormalFocus
内容的提问来源于stack exchange,提问作者Spencer Barnes
相关产品推荐
相关产品推荐

