Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access DoCmd.Quit挂起在Microsoft Access中_Ms Access - Fatal编程技术网

Ms access DoCmd.Quit挂起在Microsoft Access中

Ms access DoCmd.Quit挂起在Microsoft Access中,ms-access,Ms Access,我正在调试一个Microsoft Access程序,当用户长时间使用该程序后单击“退出”按钮时,该程序偶尔会挂起。这个程序只是一个带有SQL数据库后端的精益访问前端 让我困惑的一件事是,“退出”按钮除了以下命令外什么也不做: DoCmd.Quit 现在我怀疑这可能是由杀毒软件引起的。MS Access将尝试在退出时写入(压缩)数据库文件,防病毒软件可能不喜欢这样做 然而,我只是想知道以前还有谁有过这个问题?是否还有其他可能导致此问题的因素?数据库可能具有自动压缩功能..并且docmd.quit

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

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

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


然而,我只是想知道以前还有谁有过这个问题?是否还有其他可能导致此问题的因素?

数据库可能具有自动压缩功能..并且docmd.quit会使用该选项。压缩一个更大的数据库,即使它是sql支持的,也可能需要足够的时间让它看起来像一个挂起

试试这个


Application.Quit AcquitsAvone将更快地关闭,但不会压缩

数据库可能有自动压缩功能,..docmd.quit会执行该选项。压缩一个更大的数据库,即使它是sql支持的,也可能需要足够的时间让它看起来像一个挂起

试试这个


Application.Quit AcquitsAvone将更快地关闭,但不会压缩

我经历过这种行为,它是由使用静态DAO记录集的代码导致的,该记录集未能关闭

Static rs As DAO.Recordset
'Missing code
rs.Close
有点晦涩,但你永远不知道


但这是在以任何方式关闭应用程序时发生的。

我经历过这种行为,这是由于使用静态DAO记录集的代码未能关闭应用程序造成的

Static rs As DAO.Recordset
'Missing code
rs.Close
有点晦涩,但你永远不知道


不过,这是在以任何方式关闭应用程序时发生的。

如果已打开“关闭时压缩”功能

把它关掉

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

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

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


  • 不要在关闭时使用紧凑型。它既没有价值,也很危险。

    如果您打开了“关闭”按钮

    把它关掉

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

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

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


  • 不要在关闭时使用紧凑型。这既没有价值,也很危险。

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

    如果不是,则可能是某个窗体中的某个拆卸代码在关闭该窗体时执行。我以前见过这种类型的代码进入无限循环,或者在具有循环依赖关系的对象中存在拆卸问题


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

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

    如果不是,则可能是某个窗体中的某个拆卸代码在关闭该窗体时执行。我以前见过这种类型的代码进入无限循环,或者在具有循环依赖关系的对象中存在拆卸问题


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

    在我的情况下,使用“CurrentDb”似乎阻止了对退出的访问。当我在应用程序开始时用一个全局变量替换它时,问题就消失了,比如

    Set goDbs = CurrentDb
    

    然后在我需要CurrentDb的地方使用“goDbs”…不知道为什么,但这解决了我的问题。

    在我的情况下,使用“CurrentDb”似乎阻止了退出。当我在应用程序开始时用一个全局变量替换它时,问题就消失了,比如

    Set goDbs = CurrentDb
    
    然后在我需要的地方用“上帝”