设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 801|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2002-10-9 18:22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
---- 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) 自 定 义
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-10 10:26 , Processed in 0.162191 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表