DoCmd.Quit在Microsoft Access中挂起

时间:2009-07-16 23:00:56

标签: ms-access

我正在调试一个Microsoft Access程序,当用户长时间使用该程序后单击退出按钮时,该程序偶尔会挂起。该程序只是一个精简的Access前端,带有SQL数据库后端。

让我感到困惑的一件事是,退出按钮除了以下命令外什么都不做:

DoCmd.Quit

现在我怀疑这可能是由防病毒引起的。 MS Access将在退出时尝试编写(压缩)数据库文件,防病毒软件可能不喜欢这样。

但是,我只是想知道其他人之前有过这个问题吗?还有什么可能导致这个问题?

5 个答案:

答案 0 :(得分:2)

DB可能具有自动压缩功能..而docmd.quit运用该选项。压缩大型数据库,即使它是sql支持的,也可能需要足够的时间看起来像挂起。

试试这个......

Application.Quit acQuitSaveNone将关闭得更快,但不会紧凑。

答案 1 :(得分:2)

我遇到过这种行为,并且它被使用静态DAO Recordset但无法关闭它的代码所困扰。

Static rs As DAO.Recordset
'Missing code
rs.Close

有点模糊,但你永远不知道...

这是在以任何方式关闭申请时。

答案 2 :(得分:1)

如果您已打开COMPACT ON CLOSE,

关闭它。

这是一个毫无价值的“功能”,它永远不应该以实现的形式添加到Access中。

  1. 没有Access应用程序,但最简单的不应分为前端(表单/报告/查询/模块)和后端(仅限表)。正确设计的前端永远不会膨胀超过一定百分比,也不需要压实。它只是需要压缩的数据表。 COMPACT ON CLOSE因此根本不会压缩数据,只是前端,因此它毫无价值。

  2. 如果你在后端打开它,你可能会丢失数据,没有追索权。这是因为Jet / ACE中的某些形式的损坏允许您毫无问题地使用数据,但是一旦压缩,数据就会丢失。因此,在压缩之前,一个表可能有100个记录,而在压缩之后,98,因为在紧凑操作中丢失了损坏的记录。由于这通常会在没有被注意的情况下发生,因此COMPACT ON CLOSE会使您处于压缩的非常危险的位置,而无法取消它,这样如果您的文件损坏,您可能会丢失数据。

  3. 请勿使用COMPACT ON CLOSE。它既无价值又危险。

答案 3 :(得分:0)

尝试关闭所有表单并从命令窗口运行docmd.quit,看看是否有相同的行为。

如果没有,可能是表单关闭时执行的某个表单中的某些拆解代码。我之前看到过这种类型的代码进入无限循环或者在具有循环依赖性的对象中存在拆卸问题。

如果这是问题所在,请在每次按下“退出”按钮时打开每个表单重复上述步骤,直到它再次发生,然后检查该表单被销毁时运行的代码。

答案 4 :(得分:0)

在我的情况下,使用'CurrentDb'似乎阻止了戒烟。一旦我在应用程序开始时将其替换为全局变量,问题就消失了......

Set goDbs = CurrentDb

然后使用'goDbs',我需要CurrentDb ...不知道为什么,但这解决了我的问题。