收藏 分销(赏)

在-PB-中-巧-用-下-拉-式-数-据-窗-口.doc

上传人:仙人****88 文档编号:7164740 上传时间:2024-12-27 格式:DOC 页数:4 大小:28.50KB 下载积分:10 金币
下载 相关 举报
在-PB-中-巧-用-下-拉-式-数-据-窗-口.doc_第1页
第1页 / 共4页
在-PB-中-巧-用-下-拉-式-数-据-窗-口.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
在 PB 中 巧 用 下 拉 式 数 据 窗 口 (深圳:独孤求败 2003-05-15)     PowerBuilder 作 为 目 前 比 较 流 行 的 一 种 开 发 工 具, 有 其 独 到 之 处, 那 就 是 数 据 窗 口 (DataWindow) 。可 以 说, 数 据 窗 口 是 PowerBuilder 的 核 心, 在 对 数 据 库 的 开 发 过 程 中, 无 论 是 录 入、 查 询、 统 计 还 是 报 表, 都 离 不 开 数 据 窗 口。 但 是, 除 了 数 据 窗 口,PB 还 提 供 了 下 拉 式 数 据 窗 口 (DropDown DataWindow) , 下 拉 式 数 据 窗 口 的 使 用, 使数 据 窗 口 更 灵 活, 更 方 便, 下 面 举 例 介 绍 在 数 据 窗 口 中 使 用 下 拉 式 数 据 窗 口 的 一 些 技 巧。     在 用 数 据 窗 口 作 数 据 录 入 时, 经 常 用 到 代 码 录 入, 即 对 经 常 输 入 的 某 些 值 设 置 代 码, 录 入 时 直 接 录 入 代 码 即 可。 例 如, 有 两 个 表, 主 表 main_table 和 代 码 表 code_table, 结 构 如 下:      main_table  字 段 名 类 型 长 度 描 述  id integer   身 份 号  name char 8 姓 名  sex char 4 性 别  city Varchar 30 城 市  unit Varchar 40 单 位      code_table  字 段 名 类 型 长 度 描 述  code char 4 代 码  data char 40 内 容  ----下 面, 详 细 讨 论 如 何 使 用 下 拉 式 数 据 窗 口:  静 态 设 计 下 拉 式 数 据 窗 口 ----首 先 对 主 表 和 代 码 表 设 计 两 个 数 据 窗 口dw_main 和dw_code, 其 中dw_main 包 括 字 段id,name,sex,city 和unit;dw_code 包 括 字 段code 和data。 假 设unit 字 段 有 几 个 常 用 值 可 使 用 代 码 录 入, 则 在 设 计dw_main 时, 用 鼠 标 右 键 点 击 字 段unit, 在 下 拉 菜 单 中 选 择Properties...( 属 性), 则 系 统 会 弹 出unit 列 的 属 性 对 话 框, 在 其 中 选 择Edit( 编 辑) 项, 并 在Style( 风 格) 下 拉 列 表 框 中 选 择DropDownDW 项, 然 后 在 下 面 的Options( 选 项) 框 中 作 具 体 的 选 项 配 置: 在DataWindow 下 拉 框 中 选 择 已 设 计 好 的 代 码 数 据 窗 口dw_code 作 为 下 拉 式 数 据 窗 口; 在DisplayColumn( 显 示 列) 下 拉 框 中 选 择code 字 段; 在Data Column( 数 据 列) 下 拉 框 中 选 择data 字 段 , 这 表 示 显 示 的 是code 字 段 的 内 容, 而 实 际 存 于 表main_table 中 的 是data 字 段 的 内 容。 至 此, 数 据 窗 口 设 计 完 毕。(如 果 unit 中 的 内 容 都 能 在 data 中 找 到 , 则 其 类 型 和 长 度 可 设 置 为 char 和 4。)  ----设 计 完 数 据 窗 口 后, 需 要 建 立 一 个 数 据 录 入 的 窗 口(window), 名 字 为w_input, 在 窗 口w_input 上 建 立 一 个 数 据 窗 口 的 控 件dw_1, 其 属 性DataWindow Object Name 为dw_main。 并 在w_input 的open 事 件 中 写 入 下 列 语 句:      dw_1.SetTransObject(SQLCA)     dw_1.Retrieve() ----这 样, 在 执 行 此 窗 口 时, 在 unit 字 段 上 就 会 出 现 一 个 下 拉 式 列 表 框, 列 出 了 表 code_table 中 所 有 的 内 容, 用 户 可 以 用 鼠 标 选 择 录 入。  动 态 改 变 SQL 语 句 ----在 上 面 的 例 子 中, 如 果 表 main_table 中 的 字 段city 也 需 要 代 码 录 入, 则 还 需 为 city 字 段 新 建 一 个 表, 这 样 很 麻 烦, 因 为 有 几 个 字 段 需 要 代 码, 就 须 有 几 个 表 与 之 对 应。 我 们 可 利 用 下 拉 式 数 据 窗 口 的 一 些 特 点 减 少 麻 烦。 对 此, 可 以 相 应 地 修 改 表 code_table 的 结 构, 加 一 个 字 段 field(char(30)), 以 存 储 需 要 代 码 的 字 段 名, 这 样, 就 可 利 用 SQL 语 句 对 之 进 行 检 索, 以 得 到 某 字 段 的 所 有 代 码。 具 体 实 现 如 下: 重 新 设 计 数 据 窗 口 dw_code, 把 field 字 段 加 上 并 使 它 不 可 见 (因 为 用 户 不 需 要 见 到 该 字 段 的 内 容), 数 据 窗 口 dw_main 和 窗 口 w_input 的 设 置 如 上, 只 是 在 数 据 窗 口 dw_1 中 需 要 进 行 一 些 编 程, 具 体 是 在 ItemFocusChanged 事 件 中, 加 入 如 下 的 代 码:      String ls_sql     Integer rtncode     DataWindowChild field_child     //dwo 为 该 事 件 的 参 数, 其 name 属 性 的 值 表 示 获 得 焦 点 的 字 段 名     Choose Case lower(dwo.name)      Case 'city' //city 字 段 获 得 焦 点      //获 得 city 字 段 下 拉 数 据 窗 口 的 句 柄      rtncode = dw_1.GetChild("city",field_child)     If rtncode = -1 Then MessageBox( "Error", "Not a DataWindowChild")     //设 置 事 务 对 象     field_child.SetTransObject(SQLCA)     //获 得 下 拉 数 据 窗 口 的SQL 语 句     ls_sql = field_child.GetSQLSelect()     //重 新 设 置SQL 语 句, 加 上Where 条 件     ls_sql = ls_sql + " Where field = '" + dwo.name + "'"     field_child.SetSQLSelect(ls_sql)     //取 得 满 足 条 件 的 数 据     field_child.Retrieve()     Case 'unit' //unit 字 段 获 得 焦 点     // 获 得unit 字 段 下 拉 数 据 窗 口 的 句 柄      rtncode = dw_1.GetChild("unit",field_child)     ......( 此 处 编 程 同 上 一 样)     End Choose 动 态 设 置 取 值 参 数  ----上 例 中, 是 采 用 动 态 改 变SQL 语 句 实 现 的, 其 实, 下 拉 数 据 窗 口 有 一 种 更 简 单 的 方 法 就 是 设 置 取 值 参 数 (Retrieval Arguments) 但 这 种 方 法 适 合 从 固 定 表 中 取 数 据, 如 果 是 从 动 态 表 (即 表 名 不 固 定) 中 取 数 据, 则 只 能 通 过 改 变SQL 语 句 来 实 现。  ----修 改 数 据 窗 口 dw_code, 在 图 形 方 式 下, 选 择 Design 菜 单 下 的 Retrieval Arguments..., 设 置 取 值 参 数 的 类 型 为 String, 名 字 可 任 取, 假 设 为 field_data, 然 后 在 窗 口 下 面 的 Where 标 签 中 选 择 Column 为 "code_table.field" , Operator 为 " =" , value 为 取 值 参 数 的 值: field_data (变 量 名 前 加 冒 号 表 示 该 变 量 的 值), 至 此, 取 值 参 数 设 置 完 毕。 同 上 例, 也 需 要 在 窗 口 w_input 中 的 数 据 窗 口 控 件dw_1 中 的ItemFocusChanged 事 件 中 进 行 如 下 的 编 程:      Integer rtncode     DataWindowChild field_child     //dwo 为 该 事 件 的 参 数, 其name 属 性 的 值 表 示 获 得 焦 点 的 字 段 名     Choose Case lower(dwo.name)      Case 'city' //city 字 段 获 得 焦 点      //获 得city 字 段 下 拉 数 据 窗 口 的 句 柄      rtncode = dw_1.GetChild("city",field_child)     If rtncode = -1 Then MessageBox( "Error", "Not a DataWindowChild")     //设 置 事 务 对 象     field_child.SetTransObject(SQLCA)     //利 用 取 值 参 数 取 得 满 足 条 件 的 数 据, 如 果 没 有 数 据, 则 插 入 一 空 记 录,// 否 则 系 统 会 提 示 一 个 英 文 对 话 框,要 求 输 入 取 值 参 数 的 值。     If field_child.Retrieve(dwo.name) < 1 Then         field_child.InsertRow(0)        Case 'unit'         //unit 字 段 获 得 焦 点         //获 得unit 字 段 下 拉 数 据 窗 口 的 句 柄        rtncode="dw_1.GetChild("unit",field_child)"        ......( 此 处 编 程 同 上 一 样)      End Choose 
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服