MS Access错误MSysCompactError和Corruption Relationships已删除

时间:2017-01-13 17:22:28

标签: database ms-access access-vba ms-access-2007

背景

我们遇到了一个奇怪的问题,我们创建并分发给少数网站的MS Access 2007文件(ACCDB)。该工具用于数据收集工作,基本底层数据设计是一个父表,其中3个子表与外键链接,并通过Access强制执行参照完整性。有一个数据输入表单,其中包含用于为父实体创建关联子记录的嵌入子表单。除了一些非常直接的VBA代码,以帮助信息弹出窗口和一些基本的跳过逻辑,它非常直接,没有什么太疯狂。

这些文件被分发到大约5个不同的站点。这些网站创建了原始文件的多个副本,供每个最终用户输入自己的数据并最终发回给我们。我们没有指示他们拆分数据库文件,这似乎是最佳做法,因为我们无法确定站点上的不同用户是否在连接到网络的计算机上,或者所有用户是否都可以访问共享位置用于后端文件。此外,实际使用这些工具的人通常并不擅长技术,因此将流程保持为直接且对他们来说负担最小是优先事项。

问题:

当文件最终从其中一个站点返回给我们时,我们遇到一个奇怪的问题,其中我们看到一个名为MSysCompactError的表已创建,并且父表和三个子表之间的关系约束不存在。通过Access,进入数据库工具>关系,关系不再存在将子表连接到父表。此站点的4个文件中有3个遇到此问题 - 其他站点(共有15-20个其他工具/ Access文件)都没有遇到任何问题。 在显示问题的站点的三个文件中的每个文件中,创建MSysCompactError表的日期时间是相隔数天。

创建的MSysCompactError表具有以下记录:

ErrorCode: -1206
ErrorDescription: Unrecognized database format {PATH-TO-FILE-ON-SITES-NETWORK}
ErrorTable: {ParentTable}

ErrorCode: -1053
ErrorDescription: Index or primary key cannot contain a Null Value
ErrorTable: {ParentTable}

ErrorCode: -1522
ErrorDescription: No unique index found for the referenced field of the primary table. 
ErrorTable: {ChildTable1}

ErrorCode: -1522
ErrorDescription: No unique index found for the referenced field of the primary table.
ErrorTable: {ChildTable2}

ErrorCode: -1522
ErrorDescription: No unique index found for the referenced field of the primary table.
ErrorTable: {ChildTable3}

错误表名称建议,至少在我看来,备份和修复功能是在文件上运行的。这些网站没有表明使用该工具有任何问题/错误。幸运的是,这个错误发生在数据收集工作结束时,查看记录的创建日期时间,在创建错误表之后只创建了少数错误。我们确实在子表中遇到了一些孤立的记录 - 就像在两个文件中一样,有一个记录,所有字段都出现了“########”。此外,看起来有人在发生损坏后从父表中删除了一两条记录,并且相关的级联删除应该已经发生,但是由于关系被删除了。

我希望没有其他人经历过这个问题,但我想知道是否有人有任何关于它为何会发生的好理论。鉴于该问题仅限于一个站点,并且表中的第一个错误引用了其网络上的路径,我们认为它与其网络/设置有关。提出的一个理论是,可能某些自动化过程(可能是病毒扫描程序或备份实用程序)访问该文件并导致该问题。我知道只需打开Access文件即可更新上次修改日期时间。我们按照相同的基本程序/方法完成了类似的数据收集工作,将具有这些类型的关系数据结构的文件分发到用于数据输入的站点,并且之前从未遇到过这个问题。

0 个答案:

没有答案