2011-09-20 48 views
0

我希望通過從Windows腳本宿主運行的JScript保存所有打開的MS Access文檔。試圖保存從JScript打開的MS Access文檔

到目前爲止,我能夠通過調用獲得MS Access對象:

var objAccess = GetObject('', "Access.Application"); 

但現在我很爲難。如果是MS Word,我將枚舉.Documents屬性中的所有打開的文檔,並在它們中的每一個上調用Documents.Item(n).SaveAs()方法。

但是,您如何保存所有在MS Access中打開的文檔?

+0

雖然Access是基於文件的,但它不像其他Office應用程序那樣自動保存數據。備份通常通過使用複製來獲得,而不是另存爲。也許你可以多說一些你想做的事情? – Fionnuala

+0

我試圖在執行安裝每週更新和稍後重新啓動之前,自動保存我們計算機房中的所有打開的文檔。令我感到困惑的是,在實際的Access應用程序中有一個SaveAs選項,那麼爲什麼沒有自動化腳本呢? – ahmd0

+1

另存爲不適用。您需要確保用戶不輸入數據(檢測空閒),然後關閉Access實例。如果你有人在開發,它會變得更復雜一些。訪問與文檔不同。 – Fionnuala

回答

1

將對象變量設置爲帶有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安全...未保存的對象修改將被丟棄,但至少你會是不太可能保存對象在非功能狀態。

+0

如果我在設計過程中保存了一個表單,我會很沮喪。該表單可能無法使用。 – Fionnuala

+0

我不確定這是否是您需要的。在我讀到這個問題時,GetObject似乎爲您提供了您需要的對象引用,所以我從那裏獲取了它。我不知道服務器上的多個用戶會話。順便說一句,我更喜歡acQuitSaveNone ...如果他們在一天結束之前不保存對象更改,那些更改可以被丟棄。 – HansUp

+0

我從Access的在線幫助中獲得方法,屬性和選項。在VB編輯器中,將光標定位在單詞上,然後按F1調出相關的幫助主題。或者在搜索框中輸入它(在VB編輯器窗口的右上方---不知道該位置是否可配置)。 – HansUp