尝试从JScript保存打开的MS Access文档

时间:2011-09-20 07:34:47

标签: javascript ms-access

我希望通过从Windows脚本宿主运行的JScript来保存所有打开的MS Access文档。

到目前为止,我可以通过调用:

来获取MS Access对象
var objAccess = GetObject('', "Access.Application");

但现在我很难过。如果它是MS Word,我会枚举.Documents属性中的所有打开文档,并在每个文档上调用Documents.Item(n).SaveAs()方法。

但是如何保存 - 作为MS Access中的所有打开文档?

1 个答案:

答案 0 :(得分:1)

使用GetObject将对象变量设置为Access应用程序实例后,将其Quit方法与acQuitSaveAll选项(value = 1)一起使用。不确定JScript;在VBScript中,我可以这样做。

Dim objAccess
Set objAccess = GetObject(,"Access.Application")
WScript.Echo objAccess.CurrentDb.Name
objAccess.Quit(1) ' acQuitSaveAll
Set objAccess = Nothing

注意,当我在示例中使用GetObject时,objAccess是 new Access应用程序实例,而不是对先前运行的实例的引用。所以,使用像这样的GetObject行......

Set objAccess = GetObject('', "Access.Application")

... WScript.Echo行在CurrentDb.Name中引发错误(因为在该Access应用程序实例中没有打开数据库。

此方法将保存对设计模式但未保存的数据库对象(表格,表单,报表等)的任何更改。但是,如果用户对表单中的数据进行了任何未保存的更改,则尽管有acQuitSaveAll选项,这些更改仍将被丢弃。似乎该选项仅适用于对象,而不适用于数据。

编辑:如果这种方法不能令人满意,您可以在Access应用程序中使用VBA做更复杂的事情,正如@Remou在评论中提到的那样。一个例子是来自Arvin Meyer的KickEmOff。他还提供了一个示例数据库,用于演示代码的运行情况。

Edit2 :Remou的评论让我觉得acQuitSaveNone(value = 2)应该比acQuitSaveAll更安全...未保存的对象更改将被丢弃,但至少你不太可能保存对象处于非功能状态。