P 上图为ACCESS 2003对象模型,因为篇幅的问题,文中只显示模型中部分对象,要了解全部对象模型,请大家参阅帮助。
(三)VB编程中ACCESS VBA与VB对象表述区别
1、ACCESS VBA与VB的顶层对象都为Application ,但在编程中ACCESS VBA顶层对象表述为:Application,而在VB编程中顶层对象用简写:App表述(到VB.NET又改回了Application)。
? 例程:在VB编程中获得VB及ACCESS VBA获取当前路径实例:
'在VB中获得当前路径:
App.Path
'在VB中获得ACCESS的当前路径:
Application.CurrentProject.Path
P 在office各应用程序之间调用各组件时,通常在对象前加上库名,如:Access.Application来表述,但因为VB与ACCESS顶层对象原本表述就存在区别,在VB中可以直接用Application表述ACCESS应用程序对象,并不会产生冲突的问题。
2、ACCESS VBA和VB中部分预定义类对象(如:窗体、控件等)表述基本相同,以“标签控件”为例,VB与ACCESS VBA均为Label,在VB编程中为了与ACCESS预定义类对象加以区别,ACCESS标签对象通常用ACCESS.Label表述。
? 例程:在VB编程中定义VB及ACCESS标签控件对象实例:
'在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对象实例演示
(一)ACCESS的MDB实例
MDB实例演示获得ACCESS版本信息,并在标签Label0中显示(见下图),具体参看实例中frmVer6窗体中的代码,及类模块ClsVeresion中代码。
P mdb实例中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代码复制到VB中ClsAccVer类模块中,按前面我们所述的VB中实现ACCESS对象编程的注意要点略做修改。(见下图划红线部分)
P 1、因为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实例均在“实例包”中。在后文中我们主要就动态链接库引用的方法和技巧结合实例进行探讨。
江羽 2010-05-30午
实例包下载:点击下载此附件
上一页 下一页