| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
PowerBuilder中实现数据库的实时过滤
作者:未知    文章来源:网络    点击数:    更新时间:2007-3-16
   在拥有大量数据记录的数据库的表中进行有关记录的查询,如果不采取一定的技巧,那将是非常费时费力的事情,利用单 行 编 辑 器 和 数 据 窗 口 结 合, 再进行适当编程就能够实现数据窗口中的记录根据你键入的字符而逐步缩小范围,以方便查询。 
---- PowerBuilder中的单行编辑器SingleLineEdit中可以输入字符,但它没有在输入过程中作出实时响应的事件,为了能够对输入的数据进行实时响应,我们必须利用其他的对象的事件,而窗口(Window)的Key事件能够对窗口内的键盘输入作出实时响应,可以利用该事件获取单行编辑器的内容,然后对数据窗口进行过滤,达到实时缩小查询范围的目的。在测试过程中,发现必须输入下一个字符才能响应当前的过滤,如:我想将数据窗口过滤为左边两个字符为’02’,必须输入‘02x’,系统才会进行前面的过 滤。为了能够真正做到实时响应,我在窗口对象中另外定义了一个用户事件user_reduce,将获取数据和过滤的代码写在该事件中,然后在Key事件中写入代码this.postevent("user_reduce"), 由于postevent()函数将事件加入到事件队列的末 尾,这样系统在响应输入的操作以后再进行该事件的处理,从而实现了数据窗口根据 用户的输入实时缩小查询范围的目的。 
---- 具体实现方法如下: 
---- 设数据库中有一表名为pcode.dbf,用于记录材料信息,其字段描述如下: 
---- 字段描述字段名字段类型长度格式 
---- 编号 CODE CHAR 10 XX-XX-XXXX 
---- 名称 NAME VARCHAR 30 
---- 型号规格 MODEL VARCHAR 28 
---- 单位 UNIT VARCHAR 10 
---- 假设 你 在Application 的Open事件中已经写入连接该数据库的代码,并已成
功连接数据库,那么你就可以进行以下的步骤: 
---- 1、 新建一个窗口对象,将它保存为w_search, 在Application 的Open 事件 中加入open(w_search) 代码,这样就可以打开窗口。 
---- 2、 建立一个datawindow,类型为Grid, 数据来源为数据库中的code.dbf表, 字段全选,保存为dw_see; 
---- 3、 在w_search 窗口中增加两个对象分别为单行编辑器sle_1和数据窗口dw_1, 在dw_1 的 属 性 中 选 择 连 接 的datawindow 为dw_see, 在w_search 的open 事 
件 中 写 如 下 代 码: 
connect using sqlca;
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_1.setrowfocusindicator(hand!) // 设 置 手 型 行 指 针
---- 3、 鼠 标 单 击w_search 窗 口 的 空 白 处, 单 击 菜 单Declare 下 的User event 菜 
单 项, 在 最 下 面 的 空 白 栏 中 输 入user_reduce, 按ok 钮 返 回。 
---- 4、 鼠 标 在w_search 窗 口 的 空 白 处 单 击 右 键, 选 择 弹 出 菜 单 的script 项 进 入 
代 码 编 辑 窗, 在user_reduce 事 件 中 输 入 以 下 代 码: 
string acode,code_filter
long acount
code_filter = ""
acode = trim(sle_1.text)
if len(acode) > 0 then
acount = len(acode)
code_filter = " left(code," + string(acount) + ") = ’" ;
+ acode + "’ "
dw_1.setfilter( code_filter)
dw_1.filter()
dw_1.setsort("code A")
dw_1.sort()
end if
---- 5、 在w_search 窗 口 的key 事 件 中 输 入 如 下 代 码: 
---- this.postevent("user_reduce") 
---- 6、 保 存 并 运 行。 则 数 据 窗 口 中 的 记 录 会 根 据 你 在 单 行 编 辑 器 中 的 输 入 内 容 
进 行 动 态 缩 小 范 围。 
---- 此 程 序 在PowerBuilder5.0 中 运 行 通 过。
  • 上一篇文章: 没有了

  • 下一篇文章: 没有了
  • 相关文章