|
您的位置:学院
>> 编程开发 >>
PowerBuilder >> 在PowerBuilder中实现数据库的实时过滤
|
在PowerBuilder中实现数据库的实时过滤
|
---- 在拥有大量数据记录的数据库的表中进行有关记录的查询,如果不采取一定的技巧,那将是非常费时费力的事情,利用单 行 编 辑 器 和 数 据 窗 口 结 合, 再进行适当编程就能够实现数据窗口中的记录根据你键入的字符而逐步缩小范围,以方便查询。
---- 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 中 运 行 通 过。
|
|
|
产品库推荐 |
|