运用ActiveX组件技术创建通用的查询控件

睡觉也偷笑 分享 2022-05-07 下载文档

运用ActiveX组件技术创建通用的查询控件

Microsoft 的ActiveX 技术, 为应用程序开发提供了强大的工具。程序开发人员通过使用ActiveX 控件, 例如系统定制的按钮、文本框、列表框、组合框, 或者由自己创建的更加复杂的组合控件, 可以轻松快捷地开发出各种应用程序。 ---- 笔者运用ActiveX 组件技术, 在Visual Basic 5 ( 简体中文版) 环境下, 创建了一个通用的查询控件。该控件的功能是, 根据用户的选择, 生成对数据库表的各种查询组合, 即查询语句的Where 子句。

控件的实现步骤-

--- 1. 建立控件工程---- 从" 文件" 菜单里选择" 新建工程" 命令。在新建工程对话框里, 选择"ActiveX 控件" 图标, 用" 查询控件.VBP" 文件名保存工程。这时在工具栏中已经添加了" 查询控件" 的图标, 并且该控件和OLE 控件的图标都处于隙式状态。只要" 查询控件" 可见, 它们就始终为此状态。

---- 2. 建立控件窗体---- 对工程中的UserControl1( 用户控件) 模块进行处理, 建立如图所示的控件对象窗体:

---- (1) 放置1 个标签框。设置Caption 属性为" 选择查询条件:";

---- (2) 放置7 个检查框。检查框由上而下名为

Check1(0)-Check1(6), 且Check1(6) 的Caption 属性

设为" 显示查询字符串";

---- (3) 放置18 个组合框。组合框分左、中、右3 列6 横

行, 自左至右、由上而下, 名为Combo1(0)-Combo1(17)。

给中间列6 个组合框的List 属性输入: =、< =、>=、< 、

>、Like 等关系运算符;

---- (4) 放置10 个选择按钮。

按钮自左到右、由上而下名为Option1(0) -Option1(9),

且左列的Text 的属性设为" 与", 右列设为" 或"。

---- (5) 放置2 个命令按钮。按钮名为Command1(0) 和

Command1(1), 设置Caption 属性分别为" 确定" 和" 取

消"。

---- 3. 定义控件属性和事件---- 控件属性和事件, 是控件的使用者与控件交互的接口。由于该控件要根据使用者的

要求查询指定的数据库表, 并返回查询字符串, 故需定

义Connect( 数据库连接信息)、Database( 数据库名)、

Tablename( 表名) 三个属性和GetSelectionSql( 获取

查询字符串) 一个事件。 ---- 定义控件属性有几种方

法:

一是使用类属性过程。

二是建立属性页。

这里使用最简单的方法, 向控件模块添加公共变量。

---- 在控件代码的" 通用声明" 区域输入下述代码:

Public Connect, Database, Tablename As String

Public Event GetSelectionSql(ByVal SelectionSql As

String)

同时定义几个临时变量:

Dim db As Database, rs, rs1 As Recordset

Dim SelectionSql,Msg As String

Dim i As Integer

---- 4. 为控件编程---- 为了实现控件功能, 需要对控件的事件编程。( 以下程序都经过实际运行测试, 可以原样复制使用) (1) o1(Index + 2), Combo1(Index).Text)

End Select

End Sub

---- (6) 单击命令按钮: 单击" 确定" 时, 根据用户的选择建立查询字符串, 并引发GetSelectionSql 事件返回字符串; 单击" 取消" 时, 关闭查询窗体。

Private Sub Command1_Click(Index As Integer)

Select Case Index

Case 0 '确定

SelectionSql = " WHERE " For i = 0 To Check1.Count - 1 If Check1(i).Value = 1 Then

If SelectionSql < > " WHERE " Then

If Option1((i - 1) * 2) Then

SelectionSql = SelectionSql & " AND "

Else

SelectionSql = SelectionSql & " OR "

End If

End If

If Combo1(i * 3) < > "" Then

SelectionSql = SelectionSql & Combo1(i * 3) Else

SelectionSql = ""

MsgBox "该项还未设值!", 64, "查询条件:"

Combo1(i * 3).SetFocus

Exit Sub

End If If Combo1(i * 3 + 1) < > "" Then

SelectionSql = SelectionSql & " " & Combo1(i * 3 + 1) _ & " "

Else

SelectionSql = ""

MsgBox "该项还未设值!", 64, "查询条件:"

Combo1(i * 3 + 1).SetFocus

Exit Sub

End If SelectionSql = SelectionSql _

& CheckType(rs(Combo1(i * 3).Text).Type, _ Combo1(i * 3 + 2)) End If

Next i If SelectionSql = " WHERE " Then SelectionSql = "" If Check2.Value = 1 Then

MsgBox "SelectionSql = " & SelectionSql , 64, "查询字符串:"

End If RaiseEvent GetSelectionSql(SelectionSql) Unload Parent Case 1 '取消Unload Parent

End Select

End Sub

---- (7) 自定义过程: 给左列组合框置值- 表的列名。 Private Sub LoadCboLeft(ByVal Cbo As ComboBox)

If rs.EOF And rs.BOF Then

MsgBox Tablename & "表中无记录!", 64, "查询条件:"

Exit Sub

End If

rs.MoveFirst For i = 0 To rs.Fields.Count - 1

Cbo.AddItem rs(i).Name

Next

Cbo.Text = Cbo.List(0) End Sub

---- (8) 自定义过程: 给右列组合框置值- 根据左列组合框中表的

列名置相应的列值。 Private Sub LoadCboRight(ByVal Cbo As ComboBox, ByVal ColName As String)

If rs.EOF And rs.BOF Then

MsgBox Tablename & "表中无记录!", 64, "查找条件:"

Exit Sub

End If Cbo.Clear Set rs1 = db.OpenRecordset _

("select DISTINCT " & ColName & " from " & Tablename)

Do While Not rs1.EOF

If Not IsNull(rs1(0)) Then

Cbo.AddItem rs1(0)

End If

rs1.MoveNext

Loop Cbo.Text = Cbo.List(0)

End Sub

---- (9) 自定义函数: 检查数据类型。 Public Function CheckType(ByVal sType As String, _

ByVal sValue As String) As String Select Case sType

Case dbBoolean

If sValue = ("true" Or "false" Or 0 Or 1) Then

CheckType = CBool(sValue)

Exit Function

End If

Case dbByte

If IsNumeric(sValue) Then CheckType = CByte(sValue) Exit Function

End If

Case dbInteger

If IsNumeric(sValue) Then CheckType = CInt(sValue) Exit Function

End If

Case dbLong

If IsNumeric(sValue) Then CheckType = CLng(sValue) Exit Function

End If

Case dbCurrency

If IsNumeric(sValue) Then CheckType = CCur(sValue) Exit Function

End If

Case dbSingle

If IsNumeric(sValue) Then

CheckType = CSng(sValue)

Exit Function

End If

Case dbDouble

If IsNumeric(sValue) Then

CheckType = CDbl(sValue)

Exit Function

End If

Case dbDate

If IsDate(sValue) Then

CheckType = "CDate('" & sValue & "')"

Exit Function

End If

Case dbText

CheckType = "'" & CStr(sValue) & "'"

Exit Function

Case Else

MsgBox "该项超出查询范围或数据类型不对!", 16, "查询条件:" CheckType = ""

End Select

End Function

---- 5. 生成OCX 文件---- 在" 工程组" 窗口里选定" 查询控

件.VBP" 工程。从" 文件" 菜单里选择" 生成查询控件.OCX", 生成工程窗口打开, 选择好保存控件的路径和文件名后, 按确定按钮。 ---- 至此," 查询控件" 已创建完毕。Visual Basic 已在您的操作系统注册表里注册了这个控件。在Windows 95 中控件的注册位置是:HKEY_LOCAL MACHINE\SOFTWARE\CLASSES\CLSID。控件的使用说明---- 控件创建好后, 就可以提供给他人使用了。可以通过创建CAB 文件, 经国际互连网发行给用户使用。这里仅说明在Visual Basic 编程环境下的使用。---- 1. 将" 查询控件.OCX"、" 查询控件.EXP"、" 查询控件.LIB" 这三个文件复制到您的服务器或工作站的某一路径下。例如:C:\ 用户控件。 ---- 2. 从" 工程" 菜单里, 打开" 部件" 窗口, 选定" 查询控件"。如果在选择窗口中未显示" 查询控件", 则通过浏览按钮来选定。选定好后, 按确定按钮返回," 查询控件" 图标将显式地显示在工具栏中。 ---- 3. 新建或添加一个" 标准EXE" 工程, 双击或拖放" 查询控件" 图标到工程的窗体上。 ---- 4. 选中窗体上的" 查询控件", 在窗体的属性栏或代码窗口"Form_Load" 事件中为属性赋值。例如:

Private Sub Form_Load()

---- 查询控件.Connect = "Access"

---- 查询控件.Database = "d:\my documents\access\myweb.mdb"

---- 查询控件.Tablename = "address"

End Sub ----

5. 在窗体代码窗口的" 查询控件_GetSelectionSql" 自定义事件中获取查询字符串。将该字符串连接到显示窗体或需要地方的SELECT 语句上, 即可完成各种情况的组合查询。例如: ----

Private Sub 查询控件_GetSelectionSql(ByVal SelectionSql As String) ----

MySelectionSql = SelectionSql ----

End Sub


运用ActiveX组件技术创建通用的查询控件.doc 将本文的Word文档下载到电脑

下一篇:2010年大学英语六级词汇表(免费下载)

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7 元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx