服务器 频道

将 Access 用作 Automation 服务器

    根据激活 Application 对象时是否打开 Microsoft Access,可以通过不同的方式使用 Automation 查看 Microsoft Access 的实例。

方法 1 
    使用 Automation 创建新的 Microsoft Access 实例时,由于 Application 对象的 Visible 属性被自动设置为 False,所以实例处于最小化状态。要显示 Microsoft Access,可以将 Visible 属性设置为 True。例如: Dim objAccess as Object
Set objAccess = CreateObject("Access.Application")
objAccess.Visible = True
由于 CreateObject() 函数总是打开指定应用程序的新实例,所以这种方法可以起作用。如果直接在运行 CreateObject() 后设置 Visible 属性,则用户无法通过还原或最小化应用程序窗口重设 UserControl 和 Visible 属性来对实例进行干预。

    但是,如果使用 GetObject() 函数而不是 CreateObject() 并设置 Visible 属性,代码在以下情况下可能不起作用:


    运行代码时 Microsoft Access 已经运行。在此情况下,UserControl 属性被设置为 True,这样 Visible 属性为只读。
使用 Automation 打开 Microsoft Access 实例,由用户使用任务栏还原实例,然后由用户最小化实例。
备注:要避开这两个限制,可以使用方法 2 查看 Microsoft Access 实例。

方法 2 
    如果要查看 Microsoft Access 实例而不管用户的干预,可以使用下面所列的 ShowAccess() 过程。此示例函数通过三个 Windows API 调用函数来控制 Microsoft Access 实例,不考虑当前其 UserControl 和 Visible 属性的设置如何。 ----------------------------------------------------------------------
DECLARATIONS
----------------------------------------------------------------------

Option Explicit

Declare Function SetForegroundWindow Lib "User32" _
(ByVal hWnd As Long) As Long
Declare Function IsIconic Lib "User32" _
(ByVal hWnd As Long) As Long
Declare Function ShowWindow Lib "User32" _
(ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Const SW_NORMAL = 1 Show window in normal size
Const SW_MINIMIZE = 2 Show window minimized
Const SW_MAXIMIZE = 3 Show window maximized
Const SW_SHOW = 9 Show window without changing window size

Dim objAccess As Object module-level declaration

----------------------------------------------------------------------
This procedure brings the instance of Microsoft Access referred to
as "instance" into view. The instances window size can be SW_NORMAL,
SW_MINIMIZE, SW_MAXIMIZE, or SW_SHOW. If size is omitted, the window is
not changed (SW_SHOW). To call this function, use this syntax:
ShowAccess instance:=objAccess, size:=SW_SHOW
----------------------------------------------------------------------

Sub ShowAccess(instance As Object, Optional size As Variant)
Dim hWnd As Long, temp As Long

If IsMissing(size) Then size = SW_SHOW
On Error Resume Next
If Not instance.UserControl Then instance.Visible = True
On Error GoTo 0 turn off error handler
hWnd = instance.hWndAccessApp
temp = SetForegroundWindow(hWnd)
If size = SW_SHOW Then keep current window size
If IsIconic(hWnd) Then temp = ShowWindow(hWnd, SW_SHOW)
Else
If IsIconic(hWnd) And size = SW_MAXIMIZE Then _
temp = ShowWindow(hWnd, SW_NORMAL)
temp = ShowWindow(hWnd, size)
End If
End Sub
方法 3


    如果使用自动代码运行时已经运行的 Microsoft Access 实例查看特定的数据库,可以使用 ShowAccess() 过程(方法 2 中所述)以及下列示例代码: ----------------------------------------------------------------------
This procedure opens the sample database Northwind.mdb in a new or
existing instance of Microsoft Access (if one is already open).

NOTE: This procedure uses the ShowAccess() procedure (listed above for
Method 2). You must enter this procedure into the same module as
ShowAccess() for the code to run properly.
----------------------------------------------------------------------

Sub OpenNorthwind()
Dim path as String

On Error Resume Next temporary error handling
Set objAccess = GetObject(,"Access.Application")

If Err <> 0 Then no existing instances of Access
Set objAccess = CreateObject("Access.Application")
End If

On Error GoTo OpenNorthwind_ErrHandler normal error handler
ShowAccess instance:=objAccess, size:=SW_MAXIMIZE

With objAccess
path = .SysCmd(Access.acSysCmdAccessDir) & "Samples\Northwind.mdb"
If .DBEngine.Workspaces(0).Databases.Count = 0 Then
.OpenCurrentDatabase filepath:=path
ElseIf LCase(Right(.CurrentDb.Name, Len("northwind.mdb"))) _
<> "northwind.mdb" Then
.CloseCurrentDatabase

.OpenCurrentDatabase filepath:=path
End If
.DoCmd.OpenForm FormName:="Main SwitchBoard"
End With
Exit Sub

OpenNorthwind_ErrHandler:
MsgBox Error$(), , "Open Northwind"
End Sub

0
相关文章