VB封裝DLL實例(二)

正 文:

上文中我們已經就DLL的基本概念,以及如何將VBA代碼封裝爲DLL,如何引用該生成的DLL動態鏈接庫,進行了初步的講解,我想大家對於VB封裝DLL應該有了一個初步的瞭解。

下面主要就DLL如何實現對ACCESS對象進行封裝方法進行探討。

 

一、如何在VB中實現對ACCESS對象編程

(一)在VB中引用ACCESS對象類庫

我們要通過編譯DLL來實現對ACCESS對象的封裝,首先必須在VB中引用ACCESS對象類庫,這樣我們就可以在VB中,實現對ACCESS應用程序中的對象進行編程。

打開VB編輯窗口,點菜單【工程】-【引用】,打開【引用對話框】,點選“Microsoft Access 11.0 Object Library”完成對當前版本ACCESS應用程序對象的引用。(實例演示版本爲ACCESS 2003)

M對ACCESS對象庫的引用很關鍵,否則我們無法實現對ACCESS對象的編程

 

(二)瞭解ACCESS對象模型

VB中要對ACCESS對象進行編程,還必需對ACCESS所提供的各項對象有一定了解,因爲VB就是通過ACCESS對象的方法與屬性,來完成各項操作與設置,下圖爲ACCESS 2003 的對象部分模型圖例。

 

P上圖爲ACCESS 2003對象模型,因爲篇幅的問題,文中只顯示模型中部分對象,要了解全部對象模型,請大家參閱幫助。

 

(三)VB編程中ACCESS VBAVB對象表述區別

1ACCESS VBAVB的頂層對象都爲Application ,但在編程中ACCESS VBA頂層對象表述爲:Application,而在VB編程中頂層對象用簡寫:App表述(到VB.NET又改回了Application)。

?例程:在VB編程中獲得VBACCESS VBA獲取當前路徑實例:

'VB中獲得當前路徑:

App.Path

 

'VB中獲得ACCESS的當前路徑:

Application.CurrentProject.Path

P在office各應用程序之間調用各組件時,通常在對象前加上庫名,如:Access.Application來表述,但因爲VB與ACCESS頂層對象原本表述就存在區別,在VB中可以直接用Application表述ACCESS應用程序對象,並不會產生衝突的問題。

 

2ACCESS VBAVB中部分預定義類對象(如:窗體、控件等)表述基本相同,以“標籤控件”爲例,VBACCESS VBA均爲Label,在VB編程中爲了與ACCESS預定義類對象加以區別,ACCESS標籤對象通常用ACCESS.Label表述。

?例程:在VB編程中定義VBACCESS標籤控件對象實例:

'VB中定義VB標籤對象:

Dim m_Label As Label

 

'VB中定義ACCESS標籤對象:

Dim m_Label As Access.Label

M在進行DLL編程時,特別需注意對象表述區別的問題,否則無法編譯或是編譯後在ACCESS調用中報錯。

 

(四)VB編程中關於ACCESS VBA專屬常量

ACCESS VBA專屬常量以“ac”開頭,如:控件類(AcControlType)中的文本控件常量爲acTextBox,這些常量不一定能被VB所識別,解決辦法通常不使用“常量名”,而直接使用“常量值”,或以輸入參數方式傳遞的方法來解決。

 ?例程:實現隱藏所有文本控件。acTextBox常量值爲109

 

  Dim ctl    As Access.Control       '申明ACCESS控件對象

  Dim frmClt As Access.Controls      '申明ACCESS控件集合

  '遍歷所有ACCESS控件集合,如爲文本控件,則不顯示該控件

  For Each ctl In frmClt.Controls

     '文本控件類常量值爲109,以常量值替代acTextBox常量名

     If ctl.ControlType = 109 Then ctl.Visible = False

  Next

 

 

P你可以通過幫助查閱ACCESS專屬常量值,也可以在ACCESS VBA中通過程序方式獲取,如:在立即窗口輸入:?acTextBox回車,就可以acTextBox常量值爲:109。

 

 

二、DLL封裝ACCESS對象實例演示

(一)ACCESSMDB實例

MDB實例演示獲得ACCESS版本信息,並在標籤Label0中顯示(見下圖),具體參看實例中frmVer6窗體中的代碼,及類模塊ClsVeresion中代碼。

Pmdb實例中frmVer1-frmVer6各窗體中具體演示了,代碼按DLL封裝需要整理的思路。

 

?例程:frmVer6窗體加載事件代碼 

   

Private Sub Form_Load()

'申明自定義類的實例

Dim m_Ver As New ClsVeresion

 '調用自定義類的objAddItem方法

                  m_Ver.objAddItem Label0 

         End Sub

                                                          

?例程:ClsVeresion類模塊代碼

 

'程序功能:定義類接口,將版本信息輸出並在標籤中顯示

Public Sub objAddItem(m_label As Label)

    m_label.Caption = AppVersion

End Sub

'函數功能:輸出ACCESS版本信息

Private Function AppVersion() As String

   Dim strVer As String '定義字符串變量

    '將版本號賦值給字符串變量

   strVer = Application.Version

   '根據版號輸出對應版本信息

   Select Case strVer

     Case "8.0"

        AppVersion = "Access 97"

     Case "9.0"

        AppVersion = "Access 2000"

     Case "10.0"

        AppVersion = "Access 2002"

     Case "11.0"

        AppVersion = "Access 2003"

     Case "12.0"

        AppVersion = "Access 2007"

   End Select

End Function

 



   (二)
DLL的封裝ACCESS對象實現

1、打開VB6.0編輯器,點菜單【新建工程】,在【新建工程】對話框中,點選【ActiveX DLL】,點【確定】。

 

 

       2、修改工程名及類名,實例中我定義的工程名:GetAccVer ,類名:ClsAccVer 修改完成以後點選菜單【保存】工程(見下圖)

P工程名就是我們後面將引用的DLL庫名,類模塊名爲代碼中我們申明的類名。

 

3、點菜單【工程】-【引用】,打開【引用對話框】,點選“Microsoft Access 11.0 Object Library”完成對當前版本ACCESS應用程序對象的引用。



4、將MDB中類模塊ClsVeresion代碼複製到VBClsAccVer類模塊中,按前面我們所述的VB中實現ACCESS對象編程的注意要點略做修改。(見下圖劃紅線部分)

P1、因爲VB與ACCESS VBA 中標籤類對象都爲Label,因此加上庫名(Access.Label)加以區別;

      2、因爲VB與ACCESS VBA頂層應用程序對象,表述原本就有區別,所以無需特別區分。

?例程:ClsAccVer類模塊代碼

 

'程序功能:定義DLL接口,將版本信息輸出並在標籤實例中顯示

Public Sub objAddItem(m_label As Access.Label)

    m_label.Caption = AppVersion

End Sub

 

'函數功能:輸出ACCESS版本信息

Private Function AppVersion() As String

   Dim strVer As String '定義字符串變量

   '將版本號賦值給字符串變量

   strVer = Application.Version

  '根據版號輸出對應版本信息

   Select Case strVer

     Case "8.0"

        AppVersion = "Access 97"

     Case "9.0"

        AppVersion = "Access 2000"

     Case "10.0"

        AppVersion = "Access 2002"

     Case "11.0"

        AppVersion = "Access 2003"

     Case "12.0"

        AppVersion = "Access 2007"

   End Select

End Function

 

 

 

4、編譯DLL,點菜單【文件】-GetAccVer.dll】動態鏈接庫,封裝DLL就完成了。

 

你現在可以在ACCESS中引用該DLL測試一下看看成果了。參看實例中frmVer7窗體,如實例引用報錯,請重新引用GetAccVer.dll即可。

 

     因爲受本人認知及文字水平所限,不免有錯漏之處,還請大家斧正。本文的Word文稿、VB源碼、MDB實例均在“實例包”中。在後文中我們主要就動態鏈接庫引用的方法和技巧結合實例進行探討。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章