网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> PowerBuilder >> 文章正文
  在PB中利用DataWindow            【字体:
在PB中利用DataWindow
作者:佚名    文章来源:不详    点击数:    更新时间:2007-8-16    
随着MIS开发工具的日益完善,人们对信息检索的要求也越来越高,以往每次查询时都由用户输入,然后进行检索的方式已越来越无法满足用户的要求,许多用户都希望系统具有自动记忆查询条件的功能,这样经常使用的查询条件就不必重复输入了。
  PowerBuilder(以下简称PB)中的DataStore(数据存储)可以帮助开发人员方便地解决这一问题。PB作为C/S环境下的数据库开发工具,其面向对象、可视化以及方便移植等特点引人注目,成为目前非常流行的数据库前端开发工具。本文以一个文献索引数据库为实例,详细介绍如何在PB中利用DataStore实现查询条件的记忆。

  DataStore是非可视的数据窗口控件,它能够为应用程序存储数据而不消耗任何图形资源。除了一些可视特征外,它的功能及行为与数据窗口控件相同。因此,我们可以利用DataStore的特点方便地记忆和维护查询条件。

  第一步,在数据库中建立一个查询条件表,其中包含每个要用到的条件字段(如标题、文献来源、开始日期、结束日期等)和一个日期字段、时间字段。该表用来保存最近使用的10个(如果需要可以保存任意个)不同条件,每个条件就是一条记录,后两个字段(日期、时间)用来记载条件的使用时间。

  第二步,创建一个包含查询条件表中所有字段的数据窗口对象 dw_condation,按使用时间的先后排序。进行查询条件设置时,

  第三步,构造如下图的查询条件设置窗口。

  四个复选框对应四个条件字段,左、右方向按钮用来浏览设置最近使用过的条件。

  第四步,为窗口事件及各控件编写相应的程序。

  定义窗口实例变量:

datastore ids_Data

long currentrow



窗口的Open事件:

ids_Data = Create DataStore

//创建数据存储实例

ids_Data.DataObject = "dw_condation"

//将dw_condation数据窗口对象与ids_Data连接

ids_Data.SetTransObject(sqlca)

ids_data.retrieve()



if ids_data.rowcount() $#@62;1 then 

//设置当前条件为最后一次使用的条件

pb_3.enabled=true

currentrow=ids_data.rowcount()

trigger event ue_setquery(ids_data.rowcount())

end if



窗口自定义事件ue_setquery:

string bt,source

//标题、文献来源

date start_day,end_day//开始日期、结束日期

long page

//页号

//根据参数rownum从数据存储实例中得到各条件值

bt=ids_Data.Object.bt[rownum]

source=ids_Data.Object.source[rownum]

start_day=ids_Data.Objec   egin[rownum]

end_day=ids_Data.Object.end[rownum]

page=ids_Data.Object.page[rownum]

//初始化各窗口控件的状态

cbx_1.checked=false

cbx_2.checked=false

cbx_3.checked=false

cbx_4.checked=false

sle_1.enabled=false

ddlb_1.enabled=false

em_1.enabled=false

em_2.enabled=false

em_3.enabled=false

//分别设置各个条件值

if not isnull(bt) and trim(bt)$#@60; $#@62;"" then

cbx_1.checked=true

sle_1.enabled=true

sle_1.text=bt

end if



if not isnull(source) and trim(source)$#@60; $#@62;"" then

cbx_2.checked=true

ddlb_1.enabled=true

ddlb_1.text=source

end if



if isnull(start_day) or 

start_day=date("1900-1-1") then 

em_1.text=string(today(),"yyyy-mm-dd")

else

cbx_3.checked=true

em_1.enabled=true

em_1.text=string(start_day,"yyyy-mm-dd")

end if



if isnull(end_day) or 

end_day=date("1900-1-1") then

em_2.text="2050-1-1"

else

cbx_3.checked=true

em_2.enabled=true

em_2.text=string(end_day,"yyyy-mm-dd")

end if



if not isnull(page) and page$#@60; $#@62;0 then

cbx_4.checked=true

em_3.enabled=true

em_3.text=string(page)

end if



窗口的Close事件:

destroy ids_data

//清除数据存储实例



pb_3(向前按钮)的Clicked事件:

if currentrow $#@62;1 then 

//设置前一个条件为当前条件

currentrow=currentrow - 1

trigger event ue_setquery(currentrow)

pb_4.enabled=true

if currentrow=1 then this.enabled=false

end if



pb_4(向后按钮)的Clicked事件:

if currentrow$#@60; ids_data.rowcount() then 

//设置后一条件为当前条件

currentrow=currentrow + 1

pb_3.enabled=true

if currentrow=ids_data.rowcount()

then this.enabled=false

trigger event ue_setquery(currentrow)

end if



pb_1(确定按钮)的Clicked事件:

string bt,source,sqltext,sql_all,sql_title,

sql_source,sql_date,

sql_page

date start_day,end_day

long page,rownum,rowcount

boolean exist

//根据用户设置的条件动态生成查询SQL语法

if cbx_1.checked then

bt=sle_1.text

sql_title="index"."title" like 

+"%"+bt +"%"

end if



if cbx_2.checked then 

source=ddlb_1.text

sql_source= and "index"."source" like 

+"%"+source +"%"

end if



if cbx_3.checked then 

start_day=date(em_1.text)

end_day=date(em_2.text)

sql_date=and"index"."date" $#@62;=+""

+string(start_day,"yyyy.mm.dd")

 +""+and +"index"."date"

$#@60; =+""+string(end_day,"yyyy.mm.dd") 

+"" 

end if

if cbx_4.checked then 

page=long(em_3.text)

sql_page= and "index"."page"=+string(page)

end if



sqltext=SELECT "index"."num",  &

+"index"."title",  &

 +"index"."source",  &

 +"index"."date",  &

 +"index"."page",  &

 +"index"."other"  &

 + FROM "index"  &

 + WHERE +sql_title +sql_source 

+sql_date+sql_page &

 + ORDER BY "index"."num" ASC 

rowcount=ids_data.rowcount()



for rownum=1 to rowcount

//判断该条件是否已经存在

if ids_data.object.data[rownum,1]=bt and &

ids_data.object.data[rownum,2]=source and &

ids_data.object.data[rownum,3]=start_day and &

ids_data.object.data[rownum,4]=end_day and &

ids_data.object.data[rownum,5]=page then

ids_data.object.data[rownum,6]=now()

ids_data.object.data[rownum,7]=today()

exist=true

exit

end if

next



if not exist then

//条件不存在,记忆新条件

if rowcount$#@60; 10 then

else

ids_data.deleterow(1)

end if



rownum=ids_data.insertrow(0)

ids_data.object.data[rownum,1]=bt

ids_data.object.data[rownum,2]=source

ids_data.object.data[rownum,3]=start_day

ids_data.object.data[rownum,4]=end_day

ids_data.object.data[rownum,5]=page

ids_data.object.data[rownum,6]=now()

ids_data.object.data[rownum,7]=today()

end if



ids_data.update()

//根据生成的SQL语句,

修改主窗口中的数据窗口语法,

进行查询

w_index.dw_1.setsqlselect(sqltext)

close(parent)

if isvalid(w_index)

 then w_index.dw_1.retrieve()



pb_2(取消按钮)的Clicked事件:

close(parent)

9 7 3 1 2 4 8 :

  以上程序在Pb6.5、Sybase SQL Anywhere5.0下运行通过,读者对它稍加修改就可应用在自己开发的MIS系统中。
9 7 3 1 2 4 8 :

站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     在PB程序中实现ODBC数据…
     用PB5 设计 串口通讯程序
     如何用VC创建可在PB中调…
     PB连接Microsoft  SQL S…
     用PB编写多线程应用程序
  • JavaWeb中的Session、Sessio…

  • VB制作可输出函数的通用DLL

  • VC调用DELPHI编写的DLL

  • 使用Delphi整合除错环境

  • 利用JDOM及XPath对XML文件进…

  • 用Digester解析xml到bean

  • 利用JBOSS+MyEclipse完成一个…

  • Java Web中写验证码

  • 分享一篇人物专访,讲北京印刷…

  • (七)Java游戏部署在Palm Os平…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David