兰 州 铁 道 学 院
胡 法 红
---- 面 向 对 象 的
开发 工 具PowerBuilder 是 目 前 流 行 的 数 据 库 前 端 开 发 工 具 之一, 特 别 是 它 的 数 据 窗 口, 用 它
可 以 很 方 便 地 对 数 据库 进 行 操 作, 并 且 数 据 窗 口 对 象 又 以 其 灵 活 多 样 的 显示 风 格 深 得 广 大 开
发 者 的 喜 爱。 有 时 候, 数 据 窗 口 对象 中 的 某 些 列 的 取 值 必 须 满 足 一 定 的 条 件 且 来 自 于另 一 个
数 据 源, 这 样, 我 们 就 要 使 用 下 拉 数 据 窗 口 风格 的 数 据 窗 口 对 象, 并 且 在 下 拉 数 据 窗 口 中 设
置 检 索参 数, 该 下 拉 数 据 窗 口 仅 显 示 满 足 条 件 的 数 据。 不 幸的 是, 如 果 我 们 直 接 使 用 该 带 参 数
的 下 拉 数 据 窗 口,在 我 们 使 用Insertrow()、Retrieve() 函 数 操 纵 数 据 窗 口 时, 系 统会 自 动 检
索 下 拉 数 据 窗 口, 出 现"Specify Retrieval" 对话 框, 怎 样 才 能 避 免 该 对 话 框 出 现 呢 ?
---- 为 了 避 免 出
现"Specify Retrieval" 对 话 框 的 出 现, 我 们 在 操 纵 主 数 据 窗 口 之 前必 须 先 操 纵 下 拉 数 据 窗
口。 为 了 让 读 者 更 清 楚 具 体 操作 过 程, 我 们 以 一 个 具 体 实 例 的 实 现 为 例 具 体 操 作。本 例 子 的 数
据 来 自 于 两 个 表:bj 和student。 具 体 步 骤 如下:
---- 一 . 创 建 窗
口w_test, 窗 口 上 的 控 件 有: 命 令 按 钮:cb_1( 插 入)、cb_2( 关 闭), 数据 窗 口 控 件dw_1, 静 态 文
本st_1( 年 度), 单 行 编 辑 框sle_1。
---- 二 . 创 建 基
于表student 的 数 据 窗 口 对 象d_student、 基 于 表bj 的 数 据 窗 口 对象d_bj; 其 中 设 置d_bj 中 的
列"nd( 年 度)" 设 置 检 索 参数, 参 数 名 为nd(string), 当 检 索 子 数 据 窗 时, 下 拉 数 据 窗显 示 满 足nd=:nd
的 数 据; 而d_student 的 列class( 班 级) 为 下 拉 数据 窗 风 格, 子 数 据 窗 为d_bj; 这 样, 当 单 击 "
插 入" 时, 数 据 窗 的" 班 级" 列 只 显 示 满 足 条 件"nd=sle_1.text" 的 班 级 名 称。
---- 三 . 在 窗 口"w_test"
中 声 明 事 例 变 量(Instance Variables):DatawindowChild child
---- 四 . 在 窗
口open 事 件 中 写 入 以 下 脚 本 程 序:sle_1.text=string(today(),"yyyy")
dw_1.settransobject(sqlca)
---- 五 . 在 命 令
按钮cb_1( 插 入) 的"clicked" 事 件 中 写 入 以 下 脚 本 程 序:
dw_1.getchild("class",child)
child.settransobject(sqlca)
child.retrieve(sle_1.text)
dw_1.settransobject(sqlca)
dw_1.insertrow(0)
---- 此 时, 光 标
停于 单 行 编 辑 框sle_1 内, 在 该 编 辑 框 内 输 入 年 度 号( 如:1998)然 后 单 击 命 令 按 钮cb_1( 插
入), 移 动 光 标 到 新 添 加 行 的" 班 级" 列, 单 击, 出 现 下 拉 数 据 窗 口( 如 图 二), 该子 窗 口 出 现 的
数 据 就 为 满 足nd="1998" 的 班 级 名 称。
---- 从 上 面 的 实
例操 作 可 知, 为 了 在 子 数 据 窗 口 中 仅 显 示 满 足 条 件 的 数据, 就 必 须 为 子 数 据 窗 口 设 置 检 索 参
数, 单 为 了 在 操纵 主 数 据 窗 口 时 出 现"Specify Retrival" 窗 口, 只 需 在 操纵 主 数 据 窗 口 之 前
先 对 子 数 据 窗 口 操 纵, 这 样 就 可 以达 到 我 们 的 要 求。 |