我已经构建了我的应用程序,但出现了一个问题,我无法理解 - 我的应用程序还没有autoexec,所以我打开访问权限并双击我的用户窗体打开它。
打开userform Access崩溃并关闭
但是,如果我首先将userform放在设计视图中,那么在表单视图中打开表单就可以了。
这怎么可能?
它不能是表单加载编码,或者从设计视图到表单视图时仍然会崩溃。
我将在表格中包含表单加载编码:
Me.LastImport.Value = DLast("LastImport", "tbl_Import_Export_logger")
Me.Text42.Value = Date
Me.Text44.Value = Date - Weekday(Date, 3)
'Compliance Reporting
Me.Text68 = DCount("[CustomerAccountNumber]", "Q_HealthChecksOverdue") 'Overdue Health Checks
Me.Text76 = DCount("[CustomerAccountNumber]", "Q_HealthChecksdue") ' Due Health Checks
Me.Text74 = DCount("[CustomerAccountNumber]", "Q_HealthChecksCompleted") ' Completed Health Checks
Me.Text72 = DCount("[LettersDueStatus]", "Q_LettersSent_Query") 'Count number of letters sent
答案 0 :(得分:2)
(最初写在Stack Overflow文档中)
当您收到错误时:" Microsoft Access遇到问题并需要关闭",通常没有很多信息可以帮助您确定错误原因。以下是您可以采取的一系列步骤来解决错误原因。
这应该始终是您的初步修复。一个好的策略是在每次发布之前对数据库进行反编译。
创建反编译快捷方式。
这会使用" /反编译"加载数据库。开关。
/decompile
使用Shift打开数据库。
双击此快捷键时按住Shift键。 这可以防止在数据库中执行任何自动运行。 你应该直接进入导航窗口。
压缩并修复数据库。
加载数据库后,您需要单击“压缩和修复”按钮。
在工具功能区上找到压缩和修复数据库按钮。
按住Shift键。单击压缩和修复按钮时按住它。
重新编译数据库
进入VBA窗口(Control + G)
这是完整的反编译过程。通常它应该修复99%的所有Access崩溃或奇怪的表单行为。
这是很多工作,所以在用完所有其他选项之后这是最后的手段。如果在不同的计算机上针对不同的用户发生问题,则只需执行此操作。如果没有为所有用户发生,那么很可能它不是一个损坏的数据库容器。
与删除二进制数据的步骤类似,您将从头开始重建数据库。这个过程有点仪式化,但如果小心翼翼地完成,不要“保持"任何可能的腐败,那么这个过程非常有效。
创建新的访问数据库容器。
将所有对象移至新容器
不使用Access中的导入/导出功能移动对象,而不是简单地单击并拖动。这样做可以将损坏的项目复制到新容器中。
<强>表格强>
<强>查询:强>
表单/报告:
<强>的宏强>
您有三种移动宏的方法。
Application.SaveAsText
/ Application.LoadFromText
方法与acMacro
参数一起使用。<强>模块强>
数据宏
对于每个数据宏,请使用SaveAsText / LoadFromText方法。
Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"
(将MyTableName替换为包含数据宏的表的名称)Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"
如前所述,这是 LOT 的工作,但它有结果。将Access 97数据库迁移到2000或将Access 2000数据库迁移到2003时,也应使用此方法。
如果您将Access本身存储的图像或其他数据作为OLE对象,那么您应该找到更好的方法。存储OLE数据时,根据存储它的计算机上的软件(和软件版本)存储它。当另一台计算机在窗体上显示该OLE对象数据但没有安装确切的软件/版本时 - 这通常会导致应用程序崩溃。
如果要存储图像数据,则更好的方法是存储文件名,而不是将图像保存到标准位置。较新版本的访问具有本机控件,可以实现这一目标。
有时,崩溃会在单个表单或报告中不断发生,或者仅在打印时发生。表单/报表中的二进制数据可能已损坏。
将表单/报表对象另存为文本
有两个未记录的功能。 Application.SaveAsText和Application.LoadFromText。您可以使用这些函数导出表单/报表定义,清理定义,然后再次导入。
Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
(将MyForm替换为Form / Report的名称。如果是正在修复的损坏报告,请使用acReport)清理表单/报告定义文件
将表单/报表重新加载到Access和Test
将表单重新加载到Access。
Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
防止将来发生这种腐败
报表/表单中损坏的二进制数据的最常见原因是多个计算机/用户使用相同的数据库客户端文件而不是拥有自己的单独副本。这就是为什么每个用户都应该在他们运行的桌面上拥有自己的客户端文件。
如果您的崩溃是随机或偶发的,请执行此步骤。如果每次运行数据库时都会发生崩溃,那么此步骤不会解决问题(尽管可能是内存不良导致首先发生损坏的原因)。
使用在操作系统外部启动并运行多次传递的内存测试程序。两种流行的选择是MemTest86(商业)和MemTest86+(开源)
开始测试并让它在工作时间运行。原因是因为建筑物中的其他因素(如电源电路上的噪声)可能会导致内存错误,因此您希望尝试保持变量不变。
如果您有内存错误,则需要确定是由于计算机内存不良还是其他因素造成的。但是,这超出了本文档的范围。
确保在测试时从等式中删除其他变量
网络损坏
请勿将客户端从网络加载。把它放在本地驱动器上并从那里运行。
企业建设
如果您所处的公司环境正在使用&#34;计算机构建&#34;并且在反编译,测试内存和剥离二进制数据方面没有成功 - 然后拒绝进行进一步测试,直到IT团队可以为用户提供仅安装了Windows,Office和Service Pack的测试计算机。
应手动安装所有软件和更新,而无需使用无人参与安装。请勿在此计算机上安装防病毒软件进行测试。
了解许多IT部门只是尝试使用构建执行One-Size-Fits-All方法,并且它们的构建都基于彼此。随着时间的推移,软件冲突可能直接导致访问崩溃或行为异常。
电力不足
如内存示例中所述 - 电源波动可能导致计算机错误。如果数据库位于工业建筑物中,那么请尝试使用电源调节器或提供清洁电源的UPS(关闭电池,而不是通过金属氧化物压敏电阻器离开主电源)
另外,检查插入电源插座或插座的电源线。确保仪表和电压规格足够。 IT部门经常将电源线插入工作站,然后卸下机器。多年以后,他们正在使用更强大的电源,但没有关闭电缆。它有所作为。如有疑问,请带上一根新的,更粗的电缆。
答案 1 :(得分:0)
感谢您的回复。我最终没有测试你们所提到的建议。
在我的情况下,在VB中我运行了调试,它突出显示了我的代码中的2个问题所以我对它们进行了排序,现在运行正常。
谢谢大家