友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
八万小说网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第62部分

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




… 页面 307…

                                                                                
图15…3 ADODB库  
Microsoft ADO Ext。 2。5 for DDL(动态数据链接) and Security(安全) (ADOX) 储存让你 
定义数据库结构和安全的对象。例如, 你可以定义表格,索引和关系,以及创建和修改用户 
和用户组帐户。  
  
该库储存在MSADOX。DLL里并且可以在C:Program Filesmon FilesSystemado文件夹里找 
到。在引用对话框上设置了对 该库的引用之后,你将能够在对象浏览器里面访问该库的对象、 
属性和方法(参见图15…4)。  

                                                                                
图15…4 ADOX库  
Microsoft Jet and Replication Objects 2。6 库(JRO)包含用于对象库复制的对象。该库储存 
在MSJRO。DLL里并在C:Program  
Filesmon FilesSystemado文件夹里可以找到。在引用对话框上设置了对该库的引用之 
后,你将能够在对象浏览器里面访 问该库的对象、属性和方法(参见图15…5)。  

                                        291 

… 页面 308…

                                                                                  
 图15…5 JRO库  
   
 VBA对象库提供了很多VBA对象,函数和方法供你访问文件系统,操作日期和时间函数,进行数学 
 和财务计算,与用户互动,转  
 换数据和读取文本文件。该库储存在VBE6。DLL文件里,位于C:Program Filesmon  
 FilesMicrosoft SharedVBAVBA6文件 夹里。当你安装Microsoft Excel 2002时,就会自动 
 设置对该库的引用。该库在Office 2002所有的应用软件中共享(参见图15…6)。  

                                                                                  
 图15…6 VBA库  

2。建立对对象库的引用  

 要操作Access 2002里的对象的话,首先就得创建对Microsoft Access 10。0对象库的引用。  
 1。  在VB编辑器窗口,选择工具|引用以打开引用对话框。该对话框列出了你电脑上所有可用的 
 类型库  
 2。  在清单上找到Microsoft Access 10。0 Object Library,并勾选上它  
 3。  关闭引用对话框 一旦创建了对Access类型库的引用,你就可以使用对象浏览器来查看该 
 应用软件的对象,属性和方法了 (参见前面的图15…1)。 使用引用对话框创建对其它将在本章 
 练习中访问对象库的引用。你可以在前面部分里找到库清单。你可以忽略对Microsoft Jet and  
 Replication Objects 2。6 Library (JRO)的引用,因为这里不会用到它。 如果你对数据库 
 复制有兴趣的话,那么可以找到很多有关Access编程的书涉及该主题,包括本人的书Learn  
 Microsoft Access  

                                         292 

… 页面 309…

 2000 Programming by Example (Wordware Publishing (ISBN 1…55622…770…1))。  
 技巧15…1 创建对Access对象库引用的好处  
 当你设置对Access对象库的引用时,你将获得下述好处:  
 …  你可以在对象浏览器里面查看Access的对象,属性和方法  
 …  你可以在VBA过程里直接运行Access函数  
 …  你可以声明该应用软件类型的对象变量,而不必声明普通的Object类型。声明变量为Dim  
 objAccess As Access。Application  
      (早期捆绑)要比将其声明为Dim objAccess As Object (后期捆绑)要快。  
 …  你可以在你的VBA代码里使用Access内置常量  
 …  你的VBA过程将运行得更快一些  

3。链接到 Access  

  本章中的示例使用了多种链接到Access的方法,本节将详细讨论每种链接方法。你可以使用 
 下述三种方法之一来建立对Access 的链接:  
 □     Automation  
 □ Data Access Objects (DAO)  
 □ 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数据库, 并且通知用户该数据库已被打开。DBEngine对象让你初始化称 
 为Microsoft Jet Engine的标准数据库引擎并打开一个数据库文件  
  (。mdb)。过程使用Close方法关闭数据库文件。  
 Sub DAOOpenJetDatabase()  
   Dim db As DAO。Database  
   Set db = DBEngine。OpenDatabase _  
    (〃C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind。mdb〃)  
   MsgBox 〃Northwind database has been opened。〃  
    db。Close  
   MsgBox 〃Northwind database has been closed。〃  
 End Sub  

6。使用 ADO 链接到 Access 数据库  

 最新的,最建议的建立对Access数据库链接的方法是使用ActiveX 数据对象(ADO)。你必须先 
 设置对微软ActiveX数据对象2。5库 或者更高版本的引用。示例程序ADOOpenJetDatabase使用 
 Connection对象链接到Northwind数据库。该对象通过Open方法打 开。注意,Open方法需要 
 一个包含数据提供者名称(本例中为Microsoft。Jet。OLEDB。4。0)和数据源名称(本例中为要 
 打开的数 据库文件完整名称)的链接字符串参数:  
 con。Open _  
    〃Provider=Microsoft。Jet。OLEDB。4。0;〃 _  
   & 〃Data Source=C:Program FilesMicrosoft Office” _  
   & 〃OfficeSamplesNorthWind。mdb;〃 在建立对Northwind数据库的链接之后,你可以使用 
 Recordset对象来访问其数据。Recordset对象用来在记录级操作数据。 Recordset对象由记 

                                         295 

… 页面 312…

 录(行)和字段(列)组成。要获得一套记录,你就得使用Open方法打开Recordset。该方法 
 需要明确的信 息,例如Recordset记录源:  
 rst。Open 〃SELECT * FROM Customers 〃 & _  
    〃WHERE City = 'London'〃; con; _  
    adOpenForwardOnly; adLockReadOnly 记录源可以是返回记录的数据库表,或查询或SQL语 
 句。在明确记录源后,你还需要表明对数据库(con)和两个常数,一个定 义指针类型 
  (adOpenForwardOnly),另一个为锁定类型(adLockReadOnly)。常数adOpenForwardOnly 
 告诉VBA创建只能 向前翻的Recordset。第二个常数adLockReadOnly明确在编辑时记录上的锁 
 定类型。该记录为只读,意味着你不能改变该数据。 过程的下一部分使用For…Each…Next循 
 环遍历Recordset并将第一条记录的内容打印到立即窗口:  
 For Each fld In rst。Fields  
       Debug。Print fld。Name & 〃=〃 & fld。Value & vbCr  
  Next  
 在获取第一条记录的数据后,过程使用了C
返回目录 上一页 下一页 回到顶部 1 2
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!