2

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

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

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

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

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

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

谢谢!

4

1 回答 1

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 并根据需要进行更正。这就是您的“复杂”查询中断的原因。

于 2012-08-28T17:28:09.683 回答