📄 cstudent.cls
字号:
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "cstudent"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
'实现数据库管理逻辑和用户接口逻辑分离的一般化处理模型
'(1) 在装载窗体时创建类实例。在类初始化中完成数据库连接、创建结果集、取当前记录到一组类私有变量中.
'(2) 在窗体中浏览记录时,通过调用类自定义方法 , 实现结果集中记录指针的移动?同时在类模块中取当前记
' 录到一组私有变量中 , 为把数据传递给窗体做好准备.
'(3) 在类模块中,为每一字段定义一个属性。读属性时 , 把相应私有变量值送属性?写属性时, 把要写的
' 内容送私有变量.
'(4) 在窗体进行读取操作时,只读相应属性,实质是读类私有变量 , 而私有变量中已存好了当前记录值.
'(5) 写操作时,只把当前值写到属性中,实质是写到类私有变量中 , 再通过类自定义方法写到结果集中.
'可以看出,所有的数据管理都在类模块中进行,在窗体中不直接对结果集和字段操作 , 操作对象是类
'属性和类方法.真正实现了数据管理逻辑和用户接口逻辑的分离 , 创造了它们之间的独立层, 为程序的进一
'步开发奠定了基础.不难在此基础上增加记录添加、删除、撤消等功能。
'在应用程序有多个接口让用户编辑相同数据时,这种方法的优越性将显示出来,它不仅可以使管理数
'据的大部分代码得到共享 , 简化了程序设计, 而且程序的修改 , 特别是底层数据库的修改变得非常容易,
'真正发挥了面向对象编程的优势.
'(1)这里采用ADO ,定义了3 个私有变量mstrName、mstrSex、mintAge 分别对应结果集中的Name、Sex、Age, 枚举类型CstudentMove 包含4 个常量,为结果集指针移动做准备。
Private cnnStudent As New ADODB.Connection 'ADODB Connection对象
Private mStudent As New ADODB.Recordset 'ADODB Recordset 对象
Private stuFld As ADODB.Field 'ADODB Field 对象
Private mstrName As String
Private mstrSex As String
Private mintAge As Integer
Public Enum CstudentMove
FirstRecord = 0
PreviousRecord = 1
NextRecord = 2
LastRecord = 3
End Enum
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\贺黎明,重要\test\VB类模块在数据库开发的应用\db\student.mdb;Mode=Share Deny None;Persist Security Info=False
'(2)创建并打开结果集
Private Sub Class_Initialize()
Dim StrSql As String
cnnStudent.Provider = "Microsoft.Jet.OLEDB.4.0"
cnnStudent.ConnectionString = "E:\贺黎明,重要\test\VB类模块在数据库开发的应用\db\student.mdb"
cnnStudent.Open
StrSql = "select Name,Sex,Age from student"
mStudent.ActiveConnection = cnnStudent
mStudent.CursorType = adOpenKeyset
mStudent.LockType = adLockOptimistic
mStudent.Open StrSql
GetCurrentRecord '调用GetCurrentRecord 方法,取结果集当前记录到私变量
End Sub
'(3)添加如下属性过程,这6 个属性分别对应字段Name 、Sex、Age 。读属性时执行Get 过程,写属性时执行Let 过程。
Public Property Get Name() As String
Name = mstrName
End Property
Public Property Let Name(ByVal vNewValue As String)
mstrName = vNewValue
End Property
Public Property Get Sex() As String
Sex = mstrSex
End Property
Public Property Let Sex(ByVal vNewValue As String)
mstrSex = vNewValue
End Property
Public Property Get Age() As Integer
Age = mintAge
End Property
Public Property Let Age(ByVal vNewValue As Integer)
mintAge = vNewValue
End Property
'''给当前学生的姓名赋值
'Public Property Let StudentName(ByVal vNewValue As Variant)
' ''若所传递过来的值不为空,则将其赋给mvarStudentName
' ''否则,就触发错误事件
' If CStr(vNewValue) <> "" Then
' mvarStudentName = vNewValue
' Else
' RaiseEvent Error("输入的学生姓名不能为空!")
' End If
'End Property
'
'''获取当前学生的姓名
'Public Property Get StudentName() As Variant
' StudentName = mvarStudentName
'End Property
'(4)在类模块中定义SaveRecord 和GetCurrentRecord 的方法
Public Sub SaveRecord()
mStudent.Save
mStudent.Fields("Name") = mstrName
mStudent.Fields("Sex") = mstrSex
mStudent.Fields("Age") = mintAge
' mStudent.Update
End Sub
Public Sub GetCurrentRecord()
mstrName = mStudent.Fields("Name").Value
mstrSex = mStudent.Fields("Sex").Value
mintAge = mStudent.Fields("Age").Value
End Sub
'(5) 在类模块中定义Move 的方法
Public Sub Move(MoveType As Integer)
Select Case MoveType
Case 0
mStudent.MoveFirst
Case 1
mStudent.MovePrevious
Case 2
mStudent.MoveNext
Case 3
mStudent.MoveLast
End Select
GetCurrentRecord
End Sub
'(6) 在类的Class Terminate () 中添加如下代码
Private Sub Class_Terminate()
' mStudent.Close
Set mStudent = Nothing
cnnStudent.Close
Set cnnStudent = Nothing
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -