Ms access “访问”;“修理”;中断一个稍微复杂的查询

Ms access “访问”;“修理”;中断一个稍微复杂的查询,ms-access,ado,jet,Ms Access,Ado,Jet,我有一个应用程序,它在运行时创建一个Jet数据库,并导入~100k条记录,这样我就可以利用索引来提高性能(不使用Jet数据库时为1分钟,而不使用Jet数据库时为近10分钟) 数据库是使用Excel中的ADO扩展性创建的,一切正常。然而,每当我在Access前端打开MDB文件时,我的问题就会出现,它会自动开始“修复”数据库 “修复”后数据仍然正常,但是我的主输出查询不能在Access中查看,因为它告诉我它不能表示连接,如果我在SQL中查看它,则所需的连接不存在,并且查询无法再运行。如果我让它得到“

我有一个应用程序,它在运行时创建一个Jet数据库,并导入~100k条记录,这样我就可以利用索引来提高性能(不使用Jet数据库时为1分钟,而不使用Jet数据库时为近10分钟)

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

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

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

这对我来说并不是一个破坏交易的问题,因为我的解决方案是将MDB隐藏起来,并建议能够看到它的用户不要打开它

然而,我真的希望数据库能被打开,我不必像那样把它藏起来。因此,我的问题是,是否有任何方法可以防止MDB自动“修复”

谢谢

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

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

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


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

应该可以创建不需要修复的数据库。也许您可以发布一些代码?我创建数据库的代码如下所示,我已经测试过这一点足以强制修复:Set objCat=CreateObject(“ADOX.Catalog”)objCat.create ConnectionString()我想到的是,我正在创建一个MDB,但在Access 2007中打开,这就是我所拥有的全部。这可能是问题所在吗?对我来说,可能是:
objcat.Create“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Z:\Docs\New.accdb;”
ConnectionString()返回Provider=Microsoft.Jet.OLEDB.4.0;数据源=[FOLDER_PATH][DBName].mdb;非常感谢您的帮助-这是否需要在创建或查询Access 07的计算机上安装Access 07?我知道Jet 4肯定适用于所有机器,但设置可能会有所不同,因为它将用于不同的位置。谢谢,这是一个很好的答案。我不能假设所有用户都可以访问,因此无法在2)中实现您的建议,但现在我至少知道了问题的原因,它让我放心,如果.MDB确实被打开,我只需要从我的“复杂”查询中重述SQL。再次感谢