📄 03.txt
字号:
◆使用PropertyBag对象
用户还需要为WriteProperties和ReadProperties事件创建代码,从而保护DataServername、DataBaseName、AdministratorName、PasseordName属性在设计阶段的属性值。这两个事件都使用PropertyBag 对象保存和检索DataServername、DataBaseName、AdministratorName、PasseordName属性的值。PropertyBag对象能够保持DataServername、DataBaseName、
AdministratorName、PasseordName的设计值。具体实现代码如下:
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
m_DataServerName = PropBag.ReadProperty("DataServerName",
m_def_DataServerName)
m_DataBaseName = PropBag.ReadProperty("DataBaseName",
m_def_DataBaseName)
m_AdministratorName = PropBag.ReadProperty("AdministratorName", m_def_AdministratorName)
m_PasswordName = PropBag.ReadProperty("PasswordName",
m_def_PasswordName)
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("DataServerName", m_DataServerName,
m_def_DataServerName)
Call PropBag.WriteProperty("DataBaseName", m_DataBaseName,
m_def_DataBaseName)
Call PropBag.WriteProperty("AdministratorName",
m_AdministratorName, m_def_AdministratorName)
Call PropBag.WriteProperty("PasswordName", m_PasswordName,
m_def_PasswordName)
End Sub
由于这两个过程是针对"容器"对象的,因此所有属性值的保存和读取都通过这两个过程来实现,而不是每个属性都需要单独的两个过程。其中,PropertyBag就是"容器对象"的名称。
WriteProperty方法有三个参数:第一个字符串标识需要保存的属性,第二个参数是需要保存的值,最后的参数是属性的缺省值。
ReadProperty 方法需要两个参数:一个字符串用来保存属性的名称,另一个为缺省值。
在窗体上绘制ActiveX控件的那一刻,就会开始执行ActiveX控件的代码。在控件设计过程中,将DataServername、DataBaseName、AdministratorName、PasseordName属性的默认值设置为:
Const m_def_DataServerName = "lyc"
Const m_def_DataBaseName = "pubs"
Const m_def_AdministratorName = "sa"
Const m_def_PasswordName = ""
当然,也可以在程序运行时多次修改它。控件的正常行为是当程序终止时恢复其默认值,这样增加了保持属性的两种独立状态的要求。
简言之,如果在设计阶段改变了一个属性值,那么控件必须得到这个新值,而不是使用默认值。相反,如果在程序运行时改变属性值,那么当返回设计状态时,控件必须检索此属性值。
PropertyBag对象允许ActiveX控件存贮有关它自己的属性值,使它能执行这个动作。PropertyChanged 方法会通知用户已经改变了一个属性。通过了解程序的状态以及是否调用了PropertyChanged方法,VB 就可以激发WriteProperties和ReadProperties事件。
◆为ShowDataBase方法编写代码
ShowDataBase方法实现在ListView控件中显示Select命令所执行的数据库操作结果。在其具体实现过程中采用了 ADO(ActiveX Data Objects)的数据存取方法。ADO的主要特点是使用更加容易,访问速度更快,而对磁盘和存储容量的要求更小,ADO支持建立各种客户/服务器模式与基于Web的应用程序,具有远程数据服务RDS(Remote Data Service)的特性,通过RDS能够在一次往返中将服务器端的数据传送到客户端的应用程序或Web页面中,并在客户端对数据进行处理后,立即更新服务器端的数据。采用ADO所基于的OLE DB技术,可以对电子邮件、文本文件、数据表格等各类数据通过统一的接口API接口进行存取,是远程数据存取的一个主要发展方向。ShowDataBase方法具有一个字符串参数,但无任何返回值,具体代码如下所示:
Public Sub showdatabase(ssql As String)
Dim AdoDatabase As New ADODB.Connection
Dim AdoTable As New ADODB.Recordset
Dim scnn As String
Dim response As String
Dim I As Integer
On Error GoTo errorhandle
scnn = "Provider=SQLOLEDB;Data Source="
& Trim(m_DataServerName) & ";
Initial Catalog=" & Trim(m_DataBaseName) & ";
User Id=" & Trim(m_AdministratorName) & ";
Password=" & Trim(m_PasswordName) & ";"
AdoDatabase.Open scnn
AdoTable.CursorType = adOpenKeyset
AdoTable.LockType = adLockOptimistic
AdoTable.CursorLocation = adUseClient
AdoTable.Open ssql, AdoDatabase, , , adCmdText
If AdoTable.BOF And AdoTable.EOF Then
response = MsgBox("没有符合条件的记录!!",
vbOKOnly + vbInformation, "数据库控件")
AdoTable.Close
Set Adotable=Nothing
AdoDatabase.Close
Set AdoDataBase=Nothing
Exit Sub
End If
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
Dim clmX As ColumnHeader
For I = 0 To AdoTable.Fields.Count - 1
Set clmX = ListView1.ColumnHeaders.Add()
With clmX
.Text = AdoTable.Fields(I).Name
End With
Next
Dim itmX As ListItem
AdoTable.MoveFirst
Do While Not AdoTable.EOF
Set itmX = ListView1.ListItems.Add()
With itmX
If IsNull(AdoTable.Fields(0).Value) Then
.Text = "NULL"
Else
.Text = AdoTable.Fields(0).Value
End If
End With
For I = 1 To AdoTable.Fields.Count - 1
If IsNull(AdoTable.Fields(I).Value) Then
itmX.SubItems(I) = "NULL"
Else
itmX.SubItems(I)
= AdoTable.Fields(I).Value
End If
Next
AdoTable.MoveNext
Loop
ListView1.View = lvwReport
AdoTable.Close
Set Adotable=Nothing
AdoDatabase.Close
Set AdoDataBase=Nothing
Exit Sub
errorhandle:
RaiseEvent Errordatabase
End Sub
当对数据库的操作发生错误后,除了不能正常显示以外,还应通知宿主程序用户。可以通过创建一个叫做Errordatabase的事件实现上述功能。要创建这个事件,把下述代码添加到UserControl对象的GeneralDeclarations段中。
Public Event Errordatabase()
此事件的工作像其他控件的事件一样。使用控件的用户可以将代码放到这个事件中,用户要做的唯一的事情就是用RaiseEvent方法激发此事件。
(7)编译控件部件(.ocx 文件)。
现在已经完成了DataListView控件的创建工作,为了在DataLV工程外也可以使用该控件,只需将DataLV工程编译.ocx控件部件即可。
在【工程组】窗口单击【DataLV】以选择该工程,在【文件】菜单上单击【生成DataLV.ocx】,在【生成工程】对话框中选择控件存放的目录后, 单击【确定】即可创建.ocx 文件。
一旦生成了.ocx文件的控件,就可以象使用其它控件一样来随心所欲地使用它了。
4)结束语
ActiveX技术可以灵活、高效的实现可交互、重入、重用、完全分布式、与语言无关的各种应用。随着ActiveX技术的发展,ActiveX控件在应用程序中的作用将会显得越来越重要,那么创建一个功能完善、具有自己特色的ActiveX控件就非常具有现实意义。只要掌握了创建ActiveX控件的基本方法,就不难创建自定制的可在各种应用领域使用的ActiveX控件。
但是,ActiveX技术也有一些明显缺点,ActiveX技术依赖于Windows平台,对广泛应用的UNIX平台目前仍不兼容,另外 ActiveX在许多方面的性能还较弱,ActiveX技术仍需要不断完善和发展。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -