2009-06-09 20 views
3

我有一個使用經典前端/後端方法的Access應用程序。昨天,後端由於我不知道的原因而被損壞。所以我打開後端與Access 2003和訪問問我,如果我想修復文件,我說是的,它似乎工作。「緊湊和修復」操作後出現MS 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 + Break來停止執行。我試圖給查詢很多時間,並沒有幫助。

我已經檢查在showplan.out的執行計劃,它似乎是正確的(至少不應該永遠需要執行)

我試圖再次壓縮數據庫。我試圖在新的數據庫中導入表格。我甚至試圖將表格及其數據導入處於現在狀態良好狀態的mdb文件(來自備份)。

任何人有想法?

+0

我假設你沒有接近2GB的限制,對吧? – 2009-06-09 14:35:15

+0

@jmgant:不,離它很遠,我在50 MB左右。 – 2009-06-09 14:35:57

+0

您是否使用名稱自動更正? (曲目名稱自動更正信息,執行名稱自動更正) – JeffO 2009-06-09 18:19:37

回答

1

我不知道什麼類型的元數據訪問從一個數據庫導入到另一個數據庫時帶來的。如果元數據損壞,將表導入另一個數據庫不一定能解決問題。如果可行,您可以嘗試在全新數據庫中從頭開始創建表格,然後將數據導出和導入(或複製並粘貼附加)到新數據庫中。

我從來沒有見過一個表像這樣在這樣一個小型數據庫中被破壞,儘管使用Access都是可能的。數據可能有問題嗎?

+0

感謝您的建議。如果我能做到這一點,那將是非常棒的,但我需要找到一種自動化的方法,因爲我有大約60張表格,它們之間有很多關係。 – 2009-06-09 15:00:34

0

我會嘗試重新創建查詢新(新名稱等),並看看會發生什麼。

你甚至可以嘗試複製它(甚至在同一個數據庫或全新的數據庫中)。如果可行,最糟糕的情況是您必須將所有對象複製到新的數據庫中。

+0

已經試過了。我將所有對象導入到一個新文件中,同樣的問題仍然存在於新文件中。 – 2009-06-09 15:01:59

-1

您是否有權訪問SQL Server安裝?您可以使用工具 - >數據庫實用程序菜單下的升遷嚮導將數據複製到SQL Server,並查看您是否遇到同樣的問題。

2

聲音就像一個索引被破壞,當這種情況發生時,它在壓縮過程中被丟棄。檢查名爲MSysCompactErrors的系統表 - 您必須在Tools |中顯示隱藏對象和/或系統對象選項|視圖。

千萬不要事先做好備份壓縮Jet MDB。由於該規則,COMPACT ON CLOSE功能完全無用,因爲它不可取消,所以您始終確保它在所有MDB中都處於關閉狀態。

0

在字段tbl2.f上是否有索引?

另請嘗試在數據表視圖中進入該表,按升序對tbl2.f進行排序,並查看第一個或最後一個記錄中是否有任何真正奇怪的內容。