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

上传人:b****6 文档编号:4138894 上传时间:2022-11-28 格式:DOCX 页数:7 大小:17.84KB
下载 相关 举报
运用ActiveX组件技术创建通用的查询控件.docx_第1页
第1页 / 共7页
运用ActiveX组件技术创建通用的查询控件.docx_第2页
第2页 / 共7页
运用ActiveX组件技术创建通用的查询控件.docx_第3页
第3页 / 共7页
运用ActiveX组件技术创建通用的查询控件.docx_第4页
第4页 / 共7页
运用ActiveX组件技术创建通用的查询控件.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

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

《运用ActiveX组件技术创建通用的查询控件.docx》由会员分享,可在线阅读,更多相关《运用ActiveX组件技术创建通用的查询控件.docx(7页珍藏版)》请在冰豆网上搜索。

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

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

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

Microsoft的ActiveX技术,为应用程序开发提供了强大的工具。

程序开发人员通过使用ActiveX控件,例如系统定制的按钮、文本框、列表框、组合框,或者由自己创建的更加复杂的组合控件,可以轻松快捷地开发出各种应用程序。

----笔者运用ActiveX组件技术,在VisualBasic5(简体中文版)环境下,创建了一个通用的查询控件。

该控件的功能是,根据用户的选择,生成对数据库表的各种查询组合,即查询语句的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(获取

查询字符串)一个事件。

----定义控件属性有几种方

法:

一是使用类属性过程。

二是建立属性页。

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

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

PublicConnect,Database,TablenameAsString

PublicEventGetSelectionSql(ByValSelectionSqlAs

String)

同时定义几个临时变量:

DimdbAsDatabase,rs,rs1AsRecordset

DimSelectionSql,MsgAsString

DimiAsInteger

----4.为控件编程----为了实现控件功能,需要对控件的事件编

程。

(以下程序都经过实际运行测试,可以原样复制使用)

(1)o1(Index+2),Combo1(Index).Text)

EndSelect

EndSub

----(6)单击命令按钮:

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

PrivateSubCommand1_Click(IndexAsInteger)

SelectCaseIndex

Case0'确定

SelectionSql="WHERE"Fori=0ToCheck1.Count-1

IfCheck1(i).Value=1Then

IfSelectionSql<>"WHERE"Then

IfOption1((i-1)*2)Then

SelectionSql=SelectionSql&"AND"

Else

SelectionSql=SelectionSql&"OR"

EndIf

EndIf

IfCombo1(i*3)<>""Then

SelectionSql=SelectionSql&Combo1(i*3)

Else

SelectionSql=""

MsgBox"该项还未设值!

",64,"查询条件:

"

Combo1(i*3).SetFocus

ExitSub

EndIfIfCombo1(i*3+1)<>""Then

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

Else

SelectionSql=""

MsgBox"该项还未设值!

",64,"查询条件:

"

Combo1(i*3+1).SetFocus

ExitSub

EndIfSelectionSql=SelectionSql_

&CheckType(rs(Combo1(i*3).Text).Type,_Combo1(i*3+2))

EndIf

NextiIfSelectionSql="WHERE"ThenSelectionSql=""IfCheck2.Value=1Then

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

"

EndIfRaiseEventGetSelectionSql(SelectionSql)UnloadParent

Case1'取消UnloadParent

EndSelect

EndSub

----(7)自定义过程:

给左列组合框置值-表的列名。

PrivateSubLoadCboLeft(ByValCboAsComboBox)

Ifrs.EOFAndrs.BOFThen

MsgBoxTablename&"表中无记录!

",64,"查询条件:

"

ExitSub

EndIf

rs.MoveFirstFori=0Tors.Fields.Count-1

Cbo.AddItemrs(i).Name

Next

Cbo.Text=Cbo.List(0)EndSub

----(8)自定义过程:

给右列组合框置值-根据左列组合框中表的列名置相应的列值。

PrivateSubLoadCboRight(ByValCboAsComboBox,ByValColNameAsString)

Ifrs.EOFAndrs.BOFThen

MsgBoxTablename&"表中无记录!

",64,"查找条件:

"

ExitSub

EndIfCbo.ClearSetrs1=db.OpenRecordset_

("selectDISTINCT"&ColName&"from"&Tablename)

DoWhileNotrs1.EOF

IfNotIsNull(rs1(0))Then

Cbo.AddItemrs1(0)

EndIf

rs1.MoveNext

LoopCbo.Text=Cbo.List(0)

EndSub

----(9)自定义函数:

检查数据类型。

PublicFunctionCheckType(ByValsTypeAsString,_

ByValsValueAsString)AsStringSelectCasesType

CasedbBoolean

IfsValue=("true"Or"false"Or0Or1)Then

CheckType=CBool(sValue)

ExitFunction

EndIf

CasedbByte

IfIsNumeric(sValue)Then

CheckType=CByte(sValue)

ExitFunction

EndIf

CasedbInteger

IfIsNumeric(sValue)Then

CheckType=CInt(sValue)

ExitFunction

EndIf

CasedbLong

IfIsNumeric(sValue)Then

CheckType=CLng(sValue)

ExitFunction

EndIf

CasedbCurrency

IfIsNumeric(sValue)Then

CheckType=CCur(sValue)

ExitFunction

EndIf

CasedbSingle

IfIsNumeric(sValue)Then

CheckType=CSng(sValue)

ExitFunction

EndIf

CasedbDouble

IfIsNumeric(sValue)Then

CheckType=CDbl(sValue)

ExitFunction

EndIf

CasedbDate

IfIsDate(sValue)Then

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

ExitFunction

EndIf

CasedbText

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

ExitFunction

CaseElse

MsgBox"该项超出查询范围或数据类型不对!

",16,"查询条件:

"

CheckType=""

EndSelect

EndFunction

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

从"文件"菜单里选择"生成查询控件.OCX",生成工程窗口打开,选择好保存控件的路径和文件名后,按确定按钮。

----至此,"查询控件"已创建完毕。

VisualBasic已在您的操作系统注册表里注册了这个控件。

在Windows95中控件的注册位置是:

HKEY_LOCALMACHINE\SOFTWARE\CLASSES\CLSID。

控件的使用说明----控件创建好后,就可以提供给他人使用了。

可以通过创建CAB文件,经国际互连网发行给用户使用。

这里仅说明在VisualBasic编程环境下的使用。

----1.将"查询控件.OCX"、"查询控件.EXP"、"查询控件.LIB"这三个文件复制到您的服务器或工作站的某一路径下。

例如:

C:

\用户控件。

----2.从"工程"菜单里,打开"部件"窗口,选定"查询控件"。

如果在选择窗口中未显示"查询控件",则通过浏览按钮来选定。

选定好后,按确定按钮返回,"查询控件"图标将显式地显示在工具栏中。

----3.新建或添加一个"标准EXE"工程,双击或拖放"查询控件"图标到工程的窗体上。

----4.选中窗体上的"查询控件",在窗体的属性栏或代码窗口"Form_Load"事件中为属性赋值。

例如:

PrivateSubForm_Load()

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

----查询控件.Database="d:

\mydocuments\access\myweb.mdb"----查询控件.Tablename="address"

EndSub----

5.在窗体代码窗口的"查询控件_GetSelectionSql"自定义事件中获取查询字符串。

将该字符串连接到显示窗体或需要地方的SELECT语句上,即可完成各种情况的组合查询。

例如:

----

PrivateSub查询控件_GetSelectionSql(ByValSelectionSqlAsString)----

MySelectionSql=SelectionSql----

EndSub

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1