按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
□ ActiveX Data Objects (ADO)
要访问数据库里的数据的话,你就得打开它。如何打开某个具体的数据库,很大程度上取决于
你使用了哪种数据库的链接方法。
4。使用 Automation 链接到 Access 数据库
当你通过Automation从Excel(或者其它应用软件)里使用Access时,你需要采取下述步骤:
1。 设置对Microsoft Access 10。0 Object Library的引用(参见本章前面的“建立对对象库
的引用”)
2。 声明一个对象变量,代表Access应用软件对象
Dim objAccess As Access。Application
在该声明中,objAccess为变量名称,而Access。Application用提供该对象的VB对象库的名
称来限定该变量。
3。 返回引用到应用软件对象上,并且将该引用到该对象变量。使用CreateObject函数,
GetObject函数或者关键字New来返回 应用软件对象的引用。使用Set语句将应用赋值到对
象变量。
Dim objAccess As Object
Set objAccess = CreateObject(“Access。Application。10”) 当对象还没有实例时,可
以使用CreateObject函数返回一个引用到应用软件对象。如果Access已经运行了的话,
那么新的 实例就已创建了并且确定的对象也已创建了。
Dim objAccess As Object
Set objAccess = GetObject(; “Access。Application。10”)
或者
Set objAccess = GetObject(“C:Program Files _
& “Microsoft OfficeOfficeSamplesNorthwind。mdb”) 使用GenObject函数返回引
用到应用软件对象,以使用Access的当前实例,或者开启Access并打开一个文件(更多信息
参见技 巧15…2)
Dim objAccess As New Access。Application 上面的语句使用关键字New,声明了一个
对象变量,返回引用到应用软件对象,并且将该引用赋予对象变量,一步完成。 你也可
以使用两步法来声明一个对象变量,这样,对该对象的控制会更多些:
Dim objAccess As Access。Application
Set objAccess = New Access。Application
□ 当使用关键字New声明对象变量时,Access应用软件并不会打开,直到你开始在VBA代码里
真正使用该对象变量。
□ 当使用关键字New声明应用软件对象变量时,Access的一个新实例就会自动创建,你不需要
使用CreateObject函数
□ 使用关键字New创建应用软件对象的新实例比使用CreateObject函数要快 因为电脑上
可能安装了多个版本的Access,所以需要在函数GetObject或者CreateObject里包括该版本
号。下面列出最后四个 Access版本:
Microsoft Access 2003 Access。Application。11 (译者加)
Microsoft Access 2002 Access。Application。10
Microsoft Access 2000 Access。Application。9
Microsoft Access 97 Access。Application。8
293
… 页面 310…
Microsoft Access 95 Access。Application。7 一旦使用第三步列出的方法之一创建了应用软
件类的新实例,你就可以通过OpenCurrentDatabase或者NewCurrentDatabase方 法的帮助来打
开一个数据库或者创建一个新数据库。你可以使用CloseCurrentDatabase方法关闭你在程序里
打开的Access数据 库。
技巧15…2 GetObject函数的参数
GetObject函数的第一个参数 – Pathname – 是可选的。 当你想要使用某个特定文件里的对象
是要用到它。第二个参数 – Class –
是必需的,它明确哪个应用软件创建该对象,以及该对象的类型。当第一个参数为可选的而第二
个为必需的时,你就必须在第一
个参数位置放置一个逗号,如下所示:
Dim objAccess As Object
Set objAccess = GetObject(; Access。Application。10”)
因为GetObject函数的第一个参数(Pathname)被忽略了,所以,就返回对Access应用软件类的
现存的实例的引用。
Dim objAccess As Object
Set objAccess = GetObject(“C:Program Files & “Microsoft
OfficeOfficeSamplesNorthwind。mdb”)
如果GetObject函数的第一个参数是个数据库文件的名称,那么就会使用该具体数据库,激活或
者创建Access应用软件类的新实例。
既然你知道了如何创建代表应用软件的对象变量,那么我们就来看看一个从Excel VBA过程里直
接打开Access数据库的程序示例 吧。下页显示的过程AccessViaAutomation将打开一个Access
文件Northwind数据库。该过程将使用Access自动控制服务器的当 前实例,如果它可用的话。
如果Access没有运行,运行时间错误将发生,并且该对象变量将被设置为Nothing。你可以通
过在程 序里放置On Error Resume Next 语句捕捉该错误。因此,如果Access没有运行,新的
Access实例就会被打开。本例子使用关键 字New来启动Access的新实例。正如前面所述,除了
使用关键字创建新对象实例之外,你也可以使用CreateObject()函数来启动
自动控制服务器的新实例,如下所示:
Set objAccess = GetObject(; “Access。Application。10”)
If objAccess Is Nothing Then
Set objAccess = CreateObject(“Access。Application。10”)
End If 当你使用自动控制启动Access时,你将在任务栏上看到Access图标。Access应用软件
对象的Visible属性被设置为False。想要 恢复该应用软件窗口的话,就得将其Visible属性
设置为Trie。 在使用时,对象要消耗内存和系统资源。要释放这些资源的话,那么你每次使
用完它的时候总应该关闭该对象。 下面示范的程序例子首先使用CloseCurrentDatabase方法
关闭Northwind数据库。接着,使用Quit方法关闭Access应用程序对象。 在关闭对象后,你也应
该将对象变量设置为关键字Nothing以释放该变量使用的内存资源。 你可以将对象变量声明为
模块级,而不是过程级变量,以避免Access实例被关闭。 在这样的环境下,对数据库的链接
就会保持,直到你关闭该自动控制的控制源(Excel)或者在VBA代码里使用Quit方法关闭它。
Sub AccessViaAutomation()
Dim objAccess As Access。Application
Dim strPath As String
On Error Resume Next
Set objAccess = GetObject(; 〃Access。Application。9〃)
If objAccess Is Nothing Then
' Get a reference to the Access Application object
Set objAccess = New Access。Application
End If
strPath = 〃C:Program FilesMicrosoft Office” _
& 〃OfficeSamplesnorthwind。mdb〃
' Open the Northwind database
With objAccess
。OpenCurrentDatabase strPath
If MsgBox(〃Do you want to make the Access 〃 & vbCrLf _
& 〃Application visible?〃; vbYesNo; _
〃Display Access〃) = vbYes Then
294
… 页面 311…
。Visible = True
MsgBox 〃Notice the Access Application icon 〃 _
& 〃now appears on the Windows taskbar。〃
End If
' Close the database and quit Access
。CloseCurrentDatabase
。Quit
End With
Set objAccess = Nothing
End Sub
使用F8键逐语句运行上面的过程。
技巧15…3 打开被保护了的Access数据库
如果该Access数据库用密码保护了,那么会提示用户输入正确的密码。你必须使用Data Access
Objects (DAO)或者ActiveX Data
Access (ADO)来编程打开密码保护的Access数据库。下面的例子使用了Access对象的DBEngine
属性来确定该数据库的密码。
要让该过程工作的话,你就必须创建对Microsoft DAO 3。6对象库的引用,如本章开头所述。
Sub OpenSecuredDB()
Static objAccess As Access。Application
Dim db As DAO。Database
Dim strDb As String
strDb = 〃C:Program FilesMicrosoft Office” & 〃OfficeSamples _
Northwind。mdb〃
Set objAccess = New Access。Application
Set db = objAccess。DBEngine。OpenDatabase(Name:=strDb; Options: False; _
ReadOnly:=False; Connect:=〃;PWD=test〃)
With objAccess
。Visible = True
。OpenCurrentDatabase strDb
End With
db。Close
Set db = Nothing
End Sub
5。使用 DAO 链接到 Access 数据库
要使用数据访问对象(DAO)连接到Access数据库的话,你就必须首先在引用对话框里创建对
Microsoft Data Access Objects 3。6
Library的引用。下面示范的程序例子DAOOpenJetDatabase,使用DBEngine对象的OpenDatabase
方法来打开Northwind数据库, 并且通知用户该数据库已被打开。