2010-11-12 81 views
2

我們有一個基於MS Access的系統,它依賴於存儲在聯網的MS Access數據庫中的後端數據。有時這些數據庫在發生隨機聯網問題時會損壞。所以我們認爲我們應該添加一些通常能夠解決緊湊和修復問題的流程。MS Access數據庫的自動壓縮和修復

問題是這個數據庫一直被多個用戶使用,並且不能保證知道當數據庫不被使用時有一定的時間可用。所以我的問題如下。

1)如果數據庫在前端應用程序(MS Access或.NET)嘗試連接到它時發生,那麼會發生什麼?這可以嗎?

2)SO推薦作爲一個很好的解決方案,使前端應用程序都等到後端MS Access數據庫準備好可以使用了?前端應用程序需要的更少更好。

謝謝!

回答

3

這是Access開發人員中一個相對常見的問題。

有兩個部分,以它:

  1. 代碼備份和壓縮數據庫,您會在服務器上的安排。

  2. 您在前端放置的代碼會自動將每個人都註銷,以允許代碼在#1運行。

一般而言,辦公室,比如說,從上午8點至下午6點本地時間只開,所以它的總體安全踢大家出子夜時分,使後端可用於備份和,比如說壓縮,凌晨1點,以便爲您的常規文件服務器備份做好準備,例如,可能發生在凌晨2點。

用於備份/壓縮的VBScript相對容易編寫。如果您需要幫助,請詢問。

對於前端,您需要有一個隱藏窗體,當應用程序打開時,它會打開一個定時器,該定時器設置爲在午夜踢出並關閉應用程序。你想得到多大的精力取決於你。如果用戶已經開始記錄並且處於無法保存的狀態(出於某種原因未能通過驗證規則),則可能存在缺陷。這可能很複雜(您必須陷入錯誤,撤消樹樁記錄,然後關閉),但最好設計您的應用程序,以便用戶無法創建無法保存的記錄。

關鍵在於您必須計劃此兩端,調度並關閉在備份/壓縮機運行時保留的任何連接。

1

從我的理解,讓它自動壓縮數據庫是一個壞主意。如果在壓縮之前出現可恢復錯誤,則最終可能會導致完全無法讀取的數據庫 - 需要從備份中進行恢復。

1>如果前端嘗試訪問正在壓縮/修復的數據庫,我相信前端客戶端會被告知數據庫不可用並且被不公正地彈出。我相信你可以爲此編寫一個錯誤處理程序,但這需要比我必須提供的更多的VBA知識。

2>如果可能,在處理多個客戶端時 - 後端的RDBMS始終性能更好,即使它是備用Windows盒子上的Microsoft SQL Server Express。數據將有更好的機會在發生「不好的事情」時發生損壞(網絡斷開,客戶端鎖定等)。有交易的RDBMS通常是一個很好的途徑。

就此問題的解決方案而言,恐怕我缺乏編程思路。抱歉。

+0

我們有多個問題,直到我們進行手動壓縮和修復時,數據庫才能正常工作。這要求我們遠程訪問我們客戶的系統或者通過它來訪問我們的客戶系統,而且我們不一定知道數據庫損壞是問題所在。如果通常自動執行,則可能會消除一個重複性錯誤的來源。 – mellamokb 2010-11-12 22:26:15

+2

可以通過VBScript進行壓縮和修復。我想,向您的客戶展示如何安全使用這樣的腳本並不困難。 – Fionnuala 2010-11-12 22:31:08

0

Garry Robinson關於Access Security的書涉及這個問題。這非常值得一讀。在Garry的網站(vb123.com)上,他銷售了一個工具箱,其中包含許多管理和安全工具,其中包括爲每個連接的工作站提供警告的工具箱,然後在幾秒鐘後關閉前端。

這本書是:

Real World Microsoft Access Database Protection and Security

如果您在企業環境中的工作訪問,這是一個必須閱讀。