我有一个使用传统前端/后端方法的Access应用程序。昨天,后端因为我不知道的原因而被破坏了。所以我用Access 2003打开后端,访问问我是否要修复文件,我说是的,它似乎有用。
我可以打开数据库查看表格内容并运行大部分查询。
但是,有一个访问查询不适用于特定的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 + Break来停止执行。我试图给查询很多时间,但没有帮助。
我已经在showplan.out中检查了执行计划,看起来是正确的(至少它不应该永远执行)
我试图再次压缩数据库。我试图在新数据库中导入表。我甚至尝试将表及其数据导入到一个处于现状(从备份)的mdb文件中。
有人有想法吗?
答案 0 :(得分:3)
听起来像索引已损坏,当发生这种情况时,它会在压缩过程中掉线。检查名为MSysCompactErrors的系统表 - 您必须在Tools |中显示隐藏的对象和/或系统对象选项| VIEW。
切勿在未事先备份的情况下压缩Jet MDB。由于这个规则,COMPACT ON CLOSE功能完全没用,因为它不可取消,所以你总是确保它在所有MDB中都被关闭。
答案 1 :(得分:1)
我不知道Access将表从一个数据库导入另一个数据库时会带来什么类型的元数据。如果元数据已损坏,则将表导入另一个数据库不一定能解决问题。如果可行,您可以尝试在全新的数据库中从头开始创建表,然后只需将数据导出(或复制并粘贴)到新数据库中。
我从来没有在这么小的数据库中看到过像这样的表被破坏了,尽管可以使用Access。这些数据可能有问题吗?
答案 2 :(得分:0)
我会尝试重新创建新的查询(新名称等),看看会发生什么。
您甚至可以尝试复制它(即使是在同一个数据库中或全新的数据库中)。如果可行,最糟糕的情况是您必须将所有对象复制到新数据库。
答案 3 :(得分:0)
字段tbl2.f上是否有索引?
同时尝试在数据表视图中进入该表,按升序排序tbl2.f,看看在第一个或最后一个记录中是否有任何奇怪的内容。
答案 4 :(得分:-1)
您是否可以访问SQL Server安装?您可以使用工具下的升迁向导 - > “数据库实用工具”菜单将数据复制到SQL Server,并查看是否存在相同的问题。