2009-07-16 118 views
0

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

一件事是,在退出按钮什么都不做,除了下面的命令:

DoCmd.Quit 

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

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

回答

2

该数据库可能具有自动压缩...和docmd.quit锻炼该选项。压缩大型数据库,即使它支持sql,也需要足够的时间来看起来像一个挂起。

尝试......

Application.Quit acQuitSaveNone将关闭速度较快,但不会紧凑。

+0

我会试一试谢谢+1 – oscarkuo 2009-07-17 03:51:27

2

我已经经历过这种行为,并且被使用静态DAO记录集的代码所遗留,而该记录集未能关闭它。

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

略显晦涩,但你永远不知道...

这是用任何手段,虽然关闭应用程序时。

+0

OO我但是花了一点时间找到... – mavnn 2009-07-17 10:34:31

1

如果您已将COMPACT ON CLOSE打开,则

将其关闭。

这是一个毫无价值的“功能”,从来不应该以实施的形式添加到Access中。

  1. 没有访问应用程序,但不应该被分成前端(形式/报告/查询/模块)和后端最微不足道(仅表)。设计合理的前端永远不会膨胀超过一定的百分比,并且不需要压缩。这只是需要压缩的数据表。因此紧凑关闭不会压缩数据,只是前端,所以它毫无价值。

  2. 如果您在后端启用了它,则可能会丢失数据,且无法追踪。这是因为Jet/ACE中的某些形式的腐败使您可以毫无问题地使用数据,但只要您压缩,数据就会丢失。因此,在压缩之前,一张表可能有100个记录,而在压缩之后有98个,因为压缩操作中损坏的记录丢失了。由于这种情况一般在没有被注意到的情况下发生,COMPACT ON CLOSE会将您置于非常危险的压缩位置而无法取消它,因此如果您的文件损坏,则可能会丢失数据。

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

0

尝试关闭所有窗体并从命令窗口运行docmd.quit以查看是否获得相同的行为。

如果不是这样,它可能是在表单关闭时执行的其中一个窗体中的一些拆卸代码。在这种类型的代码进入无限循环之前,或者在具有周期性依赖关系的对象中存在拆卸问题之前,我已经看到它。

如果事实证明是这个问题,那么当您按下“退出”按钮时,通常会打开每个表单重复上述步骤,直到它再次发生,然后检查该表单被销毁时运行的代码。

0

在我的情况下,它是使用'CurrentDb'这似乎是阻止访问退出。问题走了一次,我在应用一样开始一个全局变量代替它...

Set goDbs = CurrentDb 

,然后使用“goDbs”无论我需要CurrentDb ......不知道为什么,但就解决我的问题。