Access编程交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 单机类模块编程简介
  • Access在函数后面加一..
  • vba中RecordSou..
  • 代码设置ACCESS对象颜..
  • 非绑定窗体快速输入法
  • ODBC标量函数(1)(英..

最新文章

  • Access或VB VBA..
  • 关于VBA的0、""(空字..
  • Access导出函数Out..
  • Access日期与日期区间..
  • RecordSource ..
  • Access子窗体事件控制..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 模块/函数/VBA/API/系统 > VBA基础
VBA基础

单机类模块编程简介

这篇文章中的信息适用于:
Microsoft access 2000

本文的发布号曾为 CHS209968
高级用户:要求具有高级编程、互操作性和多用户技巧。

本文适用于 Microsoft Access 数据库 (.mdb) 和 Microsoft access 项目 (.adp)。


概要
本文讲述在 Microsoft Access 2000 中如何提出单机类模块概念及如何实施它。类模块是在 Microsoft access 7.0 中引入的,其中窗体和报表后面的类模块可以允许用户创建程序来定义对象的自定义方法和属性。

access 2000 支持单机类模块,允许您创建不提供用户界面的类实例,除非您通过编程提供用户界面。
更多信息
类模块有以下几个特点:
●Initialize 事件
●自定义功能
●Terminate 事件

每个类模块均有使用周期,使用周期的定义是在代码中持续引用类的时间长度。

Initialize 事件

创建类实例时 Initialize 事件发生。例如,用于设置默认值和初始化变量的事件。

自定义功能

可以创建在您的类中内部使用的“私有”变量、属性和方法(函数),以及供其它用户实施您的类的“公用”变量、属性和方法。

Terminate 事件

当明确卸载您的类实例或对类的引用超出范围时,Terminate 事件发生。

使用类模块的程序示例


请参考下列引用名为 clsTest 类模块的样例程序:

Function CreateClass1() As Boolean
Dim cls As New clsTest
Dim varResult As Variant
MsgBox cls.ClassState, vbInformation, "Class Example"
varResult = cls.AddInvoice("ALFKI")
MsgBox cls.ClassState, vbInformation, "Class Example"
Set cls = Nothing
CreateClass1 = True
End Function
该示例:
新建 clsTest Class 对象的实例。
调用 Class 对象的 AddInvoice 方法,并传递有效的 Customer ID(客户 ID)。
通过将 cls 对象设置为 Nothing 来卸载 Class 对象。
在样例代码中并不能清楚地看到该代码实现的细节。例如,不能确定创建 Class 对象时所发生的操作,也不能确定关闭该类时 AddInvoice 方法执行的操作或所发生的操作。这就是类模块编程技术的要点;在调用 Class 对象时,可以将所发生的复杂操作隐藏在后台。面向类的编程技术有很多优点,将在本文中详细说明。
创建样例类模块和支持代码


注意事项:执行本文中的步骤将会修改样例数据库 Northwind.mdb。需要备份 Northwind.mdb 文件,并在数据库备份上执行这些步骤。

每次创建 Class 对象时,就会在该类中发生可捕获的 Initialize 事件,它类似于窗体中的 Open 事件。Initialize 事件位于要编写类以执行操作的地方。对于 C++ 程序员来说,它类似于 Constructor。

请执行这些步骤创建 clsTest 类模块示例:


打开样例数据库 Northwind.mdb。
在插入菜单上,单击类模块。
将类模块另存为 clsTest。
在“声明”部分键入以下行:
Private This_ClassState As String
Private This_frm As Form
在模块窗口的对象框中选择类。 初始化是在过程框中自动选择的。
添加以下程序:
Private Sub Class_Initialize()
This_ClassState = "Initialized"
End Sub
添加下列自定义属性函数:
Public Property Get ClassState() As String
ClassState = This_ClassState
End Property
clsTest 的 Initialize 事件中的代码设置名为 ClassState 的只读属性的默认值。ClassState 将 Class 对象的当前状态返回到调用方。该代码并不是为了使用目的,而只是说明在实施类模块时可以使用的技术。

下列程序说明如何从 Class 对象中检索 ClassState 属性:
Function GetClass1State() As String
Dim cls As New clsTest
Dim varResult as String
varResult = cls.ClassState
Set cls = Nothing
GetClass1State = varResult
End Function
该程序从 Class 对象中返回 Initialized,说明当计划类的结果功能时要使用的概念。您可以定义类所执行的操作,此外,可以考虑如何在您的类中实现接口。这与设计窗体以便从美学角度愉悦用户的概念是一样的,不过在这种情况中,目标观众是使用 Visual Basic for Applications 编程的人员。

创建一个程序用作 clsTest 类模块的 AddInvoice 方法。该代码类似于标准模块中的代码:
在 clsTest 类模块中创建下列程序:
Function AddInvoice(custID As String) As Boolean
On Local Error GoTo AddInvoice_Err
Dim Msg As String
Dim lngOrderID As Long
Dim varResult As Variant
Set This_frm = Form_Orders
This_frm.Modal = True
This_frm.Visible = True
DoCmd.GoToRecord acForm, This_frm.Name, acNewRec
This_frm.CustomerID = custID
varResult = This_frm.SetShipTo
This_ClassState = "RecordActive=" & CStr(This_frm.OrderID)
AddInvoice = True
AddInvoice_End:
Exit Function
AddInvoice_Err:
Msg = "Error #: " & Format$(Err.Number) & vbCrLf
Msg = Msg & Err.Description
Err.Raise vbObjectError, "clsTest.AddInvoice", Msg
Resume AddInvoice_End
End Function
该程序使用简单编程技术打开“订单”窗体,添加新记录并显示记录进行编辑。使用数据访问对象 (DAO) 时,有许多可以用于该代码的增强功能。例如,您可以修改代码来检索客户的最后订单并复制它,而不用打开“订单”窗体。为了说明目的,本示例使用窗体本身来添加新记录。

注意:错误处理事件使用 Err 对象的 Raise 方法。该操作允许类的调用方(而不是用户)来处理任何错误。


该程序使用简单编程技术打开“订单”窗体,添加新记录并显示记录进行编辑。使用数据访问对象 (DAO) 时,有许多可以用于该代码的增强功能。例如,您可以修改代码来检索客户的最后订单并复制它,而不用打开“订单”窗体。为了说明目的,本示例使用窗体本身来添加新记录。 保存并关闭 clsTest 类模块。
该程序使用简单编程技术打开“订单”窗体,添加新记录并显示记录进行编辑。使用数据访问对象 (DAO) 时,有许多可以用于该代码的增强功能。例如,您可以修改代码来检索客户的最后订单并复制它,而不用打开“订单”窗体。为了说明目的,本示例使用窗体本身来添加新记录。 在“设计”视图中打开“订单”窗体。
该程序使用简单编程技术打开“订单”窗体,添加新记录并显示记录进行编辑。使用数据访问对象 (DAO) 时,有许多可以用于该代码的增强功能。例如,您可以修改代码来检索客户的最后订单并复制它,而不用打开“订单”窗体。为了说明目的,本示例使用窗体本身来添加新记录。 在视图菜单中,单击代码,然后键入下列程序:
Public Function SetShipTo() As Boolean
Call CustomerID_AfterUpdate
SetShipTo = True
End Function
“订单”窗体的类模块中需要有该程序,才能支持 clsTest 类模块示例。该程序调用 CustomerID 控件的 AfterUpdate 事件。需要更新窗体上的“收货者”信息,这是当用户从 CustomerID 列表中选择“客户”时通过用户界面触发的。由于 CreateClass1() 样例程序在代码中设置了 CustomerID 值,因此能提供一种触发 AfterUpdate 事件和更新“收货者”信息的方式。


该程序使用简单编程技术打开“订单”窗体,添加新记录并显示记录进行编辑。使用数据访问对象 (DAO) 时,有许多可以用于该代码的增强功能。例如,您可以修改代码来检索客户的最后订单并复制它,而不用打开“订单”窗体。为了说明目的,本示例使用窗体本身来添加新记录。 关闭并保存“订单”窗体。
类模块也支持 Terminate 事件。当 Class 对象超出范围,或通过将对象变量设置为 Nothing 从内存中卸载它时,该事件触发。Terminate 事件非常重要,因为您使用它来清除类本身初始化的任何对象或引用对象。对于 C++ 程序员,这类似于 Destructor

执行下列步骤,在关闭“订单”窗体和卸载 This_frm 变量的 clsTest 类模块中创建 Terminate 事件:
在“设计”视图中打开 clsTest 类模块。
在模块窗口的对象框中选择类。
在模块窗口的过程框中选择终止。
添加以下程序:
Private Sub Class_Terminate()
DoCmd.Close acForm, This_frm.Name
Set This_frm = Nothing
MsgBox "Class Terminated", vbInformation, "Class Example"
End Sub
测试样例类模块


执行下列步骤测试 clsTest 类模块的功能:
新建一个标准模块并将它保存为 Module1。
键入以下程序:
Function CreateClass1() As Boolean
Dim cls As New clsTest
Dim varResult As Variant
MsgBox cls.ClassState, vbInformation, "Class Example"
varResult = cls.AddInvoice("ALFKI")
MsgBox cls.ClassState, vbInformation, "Class Example"
Set cls = Nothing
CreateClass1 = True
End Function
要测试该函数,请在“立即”窗口中键入下列代码行,然后按 ENTER:
?CreateClass1()

注意该函数可以执行下列操作:


显示一个消息框,表示类已经被“初始化”。
打开“订单”窗体并显示 CustomerID ALFKI 的空白发票。
显示一个消息框表示 RecordActive= OrderId,其中 OrderID 是自动分配给新订单的编号。
关闭“订单”窗体。
显示一个消息框,表示类已经被“中断”。
参考
有关类模块的详细信息,请单击帮助菜单上的 Microsoft access 帮助,在“Office 助手”或“操作向导”中输入创建与窗体或报表不相关的类模块,然后单击搜索查看该主题。

发布人:共享  
分享到:
点击次数:  更新时间:2005-08-16 11:00:54  【打印此页】  【关闭】
上一条:如何把字符串传送到系统剪贴板?  下一条:存储过程入门



相关文章

  • • Access或VB VBA判断数组的值是否为空的几种方法
  • • 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别
  • • Access导出函数OutPutto解释
  • • Access日期与日期区间的筛选
  • • RecordSource SourceObject ControlSource属性的区别
  • • Access子窗体事件控制父窗体
  • • 事件​change和AfterUpdate的区别
  • • 代码修改完善方法示例(初学者必读)

热门文章

  • [2005-02-06] 一个常用的组合多条件查询 WHERE 子句的函数access数据库
  • [2004-11-15] 控制标题中冒号的显示access数据库
  • [2013-11-11] Function与Sub的异同(函数调用)access数据库
  • [2005-06-09] Access如何判断字符串中包含双字节字符access数据库
  • [2009-05-06] Access月初,月末,本月天数的函数access数据库
  • [2005-02-05] 如何用VBA更改数据库密码access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2023 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2025  www.metinfo.cn