將對象變量設置爲帶有GetObject的Access應用程序實例後,使用其Quit方法和acQuitSaveAll選項(值= 1)。不確定關於JScript;在VBScript中,我可以這樣做。
Dim objAccess
Set objAccess = GetObject(,"Access.Application")
WScript.Echo objAccess.CurrentDb.Name
objAccess.Quit(1) ' acQuitSaveAll
Set objAccess = Nothing
注意,當我用GetObject的在你的榜樣,objAccess是新訪問的應用程序實例,而不是這是以前運行實例的引用。所以,用GetObject的線路是這樣的...
Set objAccess = GetObject('', "Access.Application")
...的WScript.Echo行拋出誤差CurrentDb.Name(因爲沒有一個數據庫是Access應用程序實例中打開。
這種方法將保存設計模式下但未保存的數據庫對象(表格,表格,報告等)的任何更改,但如果用戶對錶單中的數據有任何未保存的更改,則儘管存在acQuitSaveAll選項似乎該選項僅適用於對象,而不適用於數據。
編輯:如果這種方法不令人滿意,您可以在Access應用程序中使用VBA更復雜一些,就像他在評論中提到的@Remou。一個例子是來自Arvin Meyer的KickEmOff。他還提供了一個示例數據庫,用於演示該代碼。
EDIT2:Remou的評論讓我思考acQuitSaveNone(值= 2)應該比acQuitSaveAll安全...未保存的對象修改將被丟棄,但至少你會是不太可能保存對象在非功能狀態。
雖然Access是基於文件的,但它不像其他Office應用程序那樣自動保存數據。備份通常通過使用複製來獲得,而不是另存爲。也許你可以多說一些你想做的事情? – Fionnuala
我試圖在執行安裝每週更新和稍後重新啓動之前,自動保存我們計算機房中的所有打開的文檔。令我感到困惑的是,在實際的Access應用程序中有一個SaveAs選項,那麼爲什麼沒有自動化腳本呢? – ahmd0
另存爲不適用。您需要確保用戶不輸入數據(檢測空閒),然後關閉Access實例。如果你有人在開發,它會變得更復雜一些。訪問與文檔不同。 – Fionnuala