访问“修复”打破了稍微复杂的查询

时间:2012-06-21 14:23:56

标签: ms-access ado jet

我有一个应用程序在运行时创建一个Jet数据库,并导入~100k记录,以便我可以出于性能原因使用索引(1分钟而不是使用Jet数据库时差不多10个)。

使用Excel中的ADO Extensibility创建数据库,一切正常。但是,每当我在Access前端打开MDB文件时,我的问题就出现了,它会自动开始“修复”数据库。

“修复”后数据仍然正常,但是我的主输出查询无法在Access中查看,因为它告诉我它不能代表连接,如果我然后在SQL中查看它所需的连接不存在,并且查询无法再运行。如果我让它“修复”但是不打开该查询,这仍然会发生,即它是打破查询的“修复”,而不是尝试在Access中查看它的行为。有趣的是,我使用Access GUI查询设计器构建SQL,因为我的生命太短暂而无法担心它是疯狂的包围样式,但后来又决定它本身太复杂了?

此外,没有其他任何东西似乎受到影响,所以我只能假设这是一个它不喜欢的查询。

这对我来说不是一个交易破坏者,因为我的修复方法是隐藏MDB并建议可以看到它的用户不要打开它。

但是,我真的很喜欢它,如果数据库可以打开,我不必像这样隐藏它。因此,我的问题是,是否有任何方法可以阻止MDB自动“修复”?

谢谢!

1 个答案:

答案 0 :(得分:1)

Microsoft Access在打开时“修复”该文件,因为它缺少某些特定于Microsoft Access用户界面的表。由于您使用带有Microsoft.ACE.OLEDB.12.0的OLEDB直接创建了MDB文件,因此这些表不存在,并且必须在Access第一次打开MDB时创建。有几种方法可以避免这种情况:

1)将MDB命名为.mdb以外的其他内容 - 例如:MyAccessDatabase.mad - 这将阻止Windows使用Microsoft Access打开该文件。

2)使用COM +打开Microsoft Access实例,并让它创建.MDB文件。然后,此.MDB文件将包含所有必需的表,并且不需要修复该文件。

仅供参考,每当Microsoft Access打开需要以这种方式进行修复的MDB时,它将检查所有QueryDef对象是否存在无效的SQL并根据需要进行更正。这就是你的“复杂”查询破裂的原因。