代码之家  ›  专栏  ›  技术社区  ›  Mathieu Pagé

“压缩和修复”操作后MS Access查询出现问题

  •  3
  • Mathieu Pagé  · 技术社区  · 17 年前

    我有一个使用经典前端/后端方法的访问应用程序。昨天,后台因为一个我不知道的原因被破坏了。所以我用access 2003打开了后端,access问我是否要修复这个文件,我说是的,它看起来很有用。

    我可以打开数据库,查看表内容并运行大部分查询。

    但是,有一个访问查询不适用于特定的where子句。

    例子:

    // This works in the original DB, but not in the compacted one :
    SELECT a, b, c 
    FROM tbl1 INNER JOIN tbl2 ON tbl1.d = tbl2.d 
    WHERE e = 3 AND tbl2.f = 1;
    
    // This works in both the original and the compacted one :
    SELECT a, b, c 
    FROM tbl1 INNER JOIN tbl2 ON tbl1.d = tbl2.d 
    WHERE e = 3;
    

    当我尝试运行查询时,什么都没有发生。访问进程开始使用大部分cpu,gui停止响应。如果我从查询编辑器运行查询,我可以使用Ctrl +中断来停止执行。我试着花了很多时间来查询,但没有用。

    我已经在showplan.out中检查了执行计划,它似乎是正确的(至少不应该永远执行)

    我试着再次压缩数据库。我试图在新的数据库中导入表。我甚至试图将表和它们的数据导入到现在处于良好状态(从备份中)的MDB文件中。

    有人知道吗?

    5 回复  |  直到 17 年前
        1
  •  4
  •   David-W-Fenton    17 年前

    听起来好像一个索引被破坏了,当它发生时,它在压缩过程中掉了。检查名为msyscompacterrors的系统表——您必须在“工具”“选项”“视图”中显示隐藏对象和/或系统对象。

    切勿在未事先备份的情况下压缩Jet MDB。因为这个规则,compact on close函数是完全无用的,因为它是不可取消的,所以您总是要确保它在所有mdb中都是关闭的。

        2
  •  1
  •   John M Gant aman_novice    17 年前

    我不知道当它将一个表从一个数据库导入到另一个数据库时,会带来什么类型的元数据访问。如果元数据已损坏,将表导入到另一个数据库不一定能解决问题。如果可行,可以尝试在全新的数据库中从头开始创建表,然后将数据导出并导入(或复制并粘贴附加)到新数据库中。

    在这么小的数据库中,我从未见过这样的表被破坏,尽管有了access,任何事情都是可能的。数据有问题吗?

        3
  •  0
  •   BIBD    17 年前

    我会尝试重新创建新的查询(新名称等),看看会发生什么。

    你甚至可以尝试复制它(即使是在同一个数据库或一个全新的数据库)。如果可以,最坏的情况是必须将所有对象复制到一个新的数据库中。

        4
  •  0
  •   Tony Toews    17 年前

    在tbl2.f字段上有索引吗?

    也可以尝试在数据表视图中进入该表,按升序对tbl2.f进行排序,看看第一条或最后一条记录中是否有真正奇怪的内容。

        5
  •  -1
  •   John M Gant aman_novice    17 年前

    您有权访问SQL Server安装吗?您可以使用“工具”->“数据库实用程序”菜单下的“升迁向导”将数据复制到SQL Server,并查看是否遇到了相同的问题。

    推荐文章