2009-07-16 51 views
0

我正在調試用戶在長時間使用該程序後單擊退出按鈕時偶爾會掛起的Microsoft Access程序。這個程序只是一個帶有SQL數據庫後端的精簡Access前端。這讓我爲難,DoCmd.Quit在Microsoft Access中掛起

一件事是,在退出按鈕什麼都不做,除了下面的命令:

DoCmd.Quit 

現在,我懷疑這可能是由病毒引起的。 MS Access將嘗試在退出時寫入(壓縮)數據庫文件,而防病毒軟件可能不會那樣。

但是,我只是想知道其他人有過這個問題嗎?還有什麼可能導致這個問題?

回答

2

該數據庫可能具有自動壓縮...和docmd.quit鍛鍊該選項。壓縮大型數據庫,即使它支持sql,也需要足夠的時間來看起來像一個掛起。

嘗試......

Application.Quit acQuitSaveNone將關閉速度較快,但不會緊湊。

+0

我會試一試謝謝+1 – oscarkuo 2009-07-17 03:51:27

2

我已經經歷過這種行爲,並且被使用靜態DAO記錄集的代碼所遺留,而該記錄集未能關閉它。

Static rs As DAO.Recordset 
'Missing code 
rs.Close 

略顯晦澀,但你永遠不知道...

這是用任何手段,雖然關閉應用程序時。

+0

OO我但是花了一點時間找到... – mavnn 2009-07-17 10:34:31

1

如果您已將COMPACT ON CLOSE打開,則

將其關閉。

這是一個毫無價值的「功能」,從來不應該以實施的形式添加到Access中。

  1. 沒有訪問應用程序,但不應該被分成前端(形式/報告/查詢/模塊)和後端最微不足道(僅表)。設計合理的前端永遠不會膨脹超過一定的百分比,並且不需要壓縮。這只是需要壓縮的數據表。因此緊湊關閉不會壓縮數據,只是前端,所以它毫無價值。

  2. 如果您在後端啓用了它,則可能會丟失數據,且無法追蹤。這是因爲Jet/ACE中的某些形式的腐敗使您可以毫無問題地使用數據,但只要您壓縮,數據就會丟失。因此,在壓縮之前,一張表可能有100個記錄,而在壓縮之後有98個,因爲壓縮操作中損壞的記錄丟失了。由於這種情況一般在沒有被注意到的情況下發生,COMPACT ON CLOSE會將您置於非常危險的壓縮位置而無法取消它,因此如果您的文件損壞,則可能會丟失數據。

請勿使用COMPACT ON CLOSE。它既無價值又危險。

0

嘗試關閉所有窗體並從命令窗口運行docmd.quit以查看是否獲得相同的行爲。

如果不是這樣,它可能是在表單關閉時執行的其中一個窗體中的一些拆卸代碼。在這種類型的代碼進入無限循環之前,或者在具有周期性依賴關係的對象中存在拆卸問題之前,我已經看到它。

如果事實證明是這個問題,那麼當您按下「退出」按鈕時,通常會打開每個表單重複上述步驟,直到它再次發生,然後檢查該表單被銷燬時運行的代碼。

0

在我的情況下,它是使用'CurrentDb'這似乎是阻止訪問退出。問題走了一次,我在應用一樣開始一個全局變量代替它...

Set goDbs = CurrentDb 

,然後使用「goDbs」無論我需要CurrentDb ......不知道爲什麼,但就解決我的問題。