2013-04-21 42 views
0

我有一些Access數據文件。 要執行某些計算,我需要使用原始數據中的計算(生成)值創建某些表。 這些臨時表的大小大約爲500 MB,我使用它。 對於各種標準,這必須一遍又一遍地重複至少50次。訪問/管理大小中的臨時表

第一部分完成後 - 臨時表可以被丟棄。 即使在刪除行和刪除表後文件大小依然很高,問題仍然在Access中。 因爲在每次過關後,儘管放下桌子,大小依然增加。 很快2GB牆被擊中。

解決方案的嘗試: 1.使用VBA - 創建一個臨時mdb文件 - >創建表的有 - >鏈接到原始訪問文件 - 在這裏保存生成的價值觀 - >使用的計算 - >刪除文件 做這一切再次。

這是非常慢插入記錄到這個表中。我相信它是一個鏈接表。我將要做的插入數量是幾十萬。

  1. 使用VBA壓縮和修復當前數據庫 - 沒有明確的答案。發送密鑰的工作 - 但失敗證明。

  2. 使用一個單獨的accdb文件'control_file_,它將完成原始訪問文件,刪除表,壓縮和修復的工作,然後再重新執行下一個標準。請告知VBA代碼。 VBA代碼中的連續性仍然存在。

+0

分割您的數據庫,使表格在SQL Server中。您應該能夠通過ODBC Passthrough執行更強大的查詢,甚至可能沒有臨時表。但是,如果沒有,您可以在SQL Server上創建臨時表。 – 2013-04-22 06:39:13

回答

2

我可以推薦解決壓縮數據庫的問題,最簡單的方法是簡單地使用我在以前發表的對Restarting and compacting an MSAccess database programmatically的代碼。

否則,使用單獨的臨時數據庫可能是最好的。 有關性能的一點是:如果你照顧到始終打開一個鏈接表,那麼使用單獨的鏈接數據庫不會更慢。
操作緩慢的原因是數據庫引擎需要經常創建和刪除數據庫鎖定文件。如果你保持一個鏈接表打開(打開一個記錄到一個虛擬表並且不關閉它),那麼這個鎖文件將保留,你將得到正確的性能。

1

在Access 2007當前的數據庫中,壓縮和修復是不可能的。你所看到的關於這個的所有技術都是錯誤的或者是指舊版本的Access。

我有和你一樣的問題,最好的辦法是分割你的數據庫,這樣你就可以在BE中執行你的計算,並且修復臨時數據庫。此外,您使用Renaud的想法可以解決您在性能方面的問題。