分享
 
 
 

组合查询

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

用PB进行数据库应用系统开发时,我们经常要对大量的数据进行筛选、查询,得到符合要求的记录,这就需要用到组合条件查询功能。我在作应用系统开发时,就自己编写了一个简单而又实用的组合条件查询模板窗口,只要用到组合条件查询的地方,都可从此窗口继承而来,非常方便。下面是给出其实现方法。

一、建一个外部数据源的dataobject对象,取名为:d_tabular_query ,各列如下:

Name

Type

Lenth

Dec

column_name

string

10

compare

string

3

value

string

255

and_or

string

3

二、建一窗口w_condition_query_template,Title设置为:“组合条件查询窗口模板”,并加入控件:

控件名

类型

说明

dw_query_condition

datawindow

用以输入查询条件 Datawindow Object Name 为前所建数据窗口对象 d_tabular_query

cb_add

command button

增加一查询条件

cb_del

command button

删除一查询条件

cb_ins

command button

插入一查询条件

cb_clear

command button

清除所有询条件

cb_ok

command button

由查询条件得出结果

dw_query

datawindow

查询结果 Datawindow Object Name 为空,继承后的子窗口再加入。

cb_all

command button

显示所有记录

cb_print

command button

打印查询结果

cb_exit

command button

退出

三、编写脚本

1、在dw_query_condition的Constractor事件中加入如下脚本:

//-------------------------------------------------------------//

// 功能说明:根据数据窗口dw_query设定可组合项,供组合查询选择

// 注意事项:数据窗口dw_query的对象中text命名须用默认值,

// 即:列名+ _t

// 柯建勋 于1999年4月27日

//-----------------------------------------------------------------------//

long ll_column_count

long ll_i

long ll_row

string ls_column

string ls_column_name

this.settransobject(sqlca)

ll_row = this.insertrow(0)

this.setitem(ll_row,'compare','=')

this.setitem(ll_row,'and_or','and')

ll_column_count = long(dw_query.Describe("DataWindow.Column.Count")) //总列数

this.ClearValues("column_name")

for ll_i = 1 to ll_column_count

if dw_query.Describe("#"+string(ll_i)+".Visible") = '1' then

ls_column = dw_query.Describe("#"+string(ll_i)+".Name") //列名

ls_column_name = dw_query.Describe(ls_column + "_t.text") //列名对应文本

this.SetValue("column_name", ll_i , ls_column_name + "~t" + ls_column)

end if

next

2、定义dw_query_condition的用户事件ue_Enterkeydown,Event ID选择pbm_dwnProcessEnter。

当我们按下Enter键时,将触发此事件。在ue_Enterkeydown事件中加入如下脚本:

//回车键(Enter)切换列焦点

long ll_column_count

long ll_column

ll_column_count = long(this.Describe("DataWindow.Column.Count"))

ll_column = this.getcolumn()

if ll_column = ll_column_count then

cb_add.triggerevent(clicked!) //增加一行

else

this.setcolumn(ll_column + 1)

end if

3、在cb_add的Clicked事件加入:

long ll_row

ll_row = dw_query_condition.insertrow(0)

dw_query_condition.setitem(ll_row,'compare','=')

dw_query_condition.setitem(ll_row,'and_or','and')

dw_query_condition.SetColumn(1)

4、在cb_del的Clicked事件加入:

long ll_row

ll_row = dw_query_condition.getrow()

dw_query_condition.DeleteRow(ll_row)

5、在cb_ins的Clicked事件加入:

long ll_row

long ll_new_row

ll_row = dw_query_condition.getrow()

ll_new_row = dw_query_condition.InsertRow(ll_row)

dw_query_condition.setitem(ll_new_row,'compare','=')

dw_query_condition.setitem(ll_new_row,'and_or','and')

dw_query_condition.SetColumn(1)

6、在cb_clear的Clicked事件加入:

long ll_row

dw_query_condition.reset()

ll_row = dw_query_condition.insertrow(0)

dw_query_condition.setitem(ll_row,'compare','=')

dw_query_condition.setitem(ll_row,'and_or','and')

7、在cb_ok的Clicked事件加入:

//-----------------------------------------------------------------------//

// 条件组合查询 柯建勋 1999.04.27

//-----------------------------------------------------------------------//

long ll_rowcount

long ll_row

long ll_j

string ls_filter_condition

string ls_column

string ls_compare

string ls_value

string ls_and_or

string ls_column_type

if dw_query_condition.AcceptText() = -1 then return

ll_rowcount = dw_query_condition.rowcount()

if ll_rowcount <=0 then return

ls_filter_condition = ''

for ll_row = 1 to ll_rowcount

ls_column = dw_query_condition.getitemstring(ll_row, 'column_name')

ls_compare = dw_query_condition.getitemstring(ll_row, 'compare')

ls_value = dw_query_condition.getitemstring(ll_row, 'value')

ls_and_or = dw_query_condition.getitemstring(ll_row, 'and_or')

ls_column_type = dw_query.Describe(ls_column + ".ColType") //

ls_column_type = left(ls_column_type, 3)

if ll_row = ll_rowcount then //最后一行(不加and、or)

choose case ls_column_type //根据数据类型设置Filter条件

case 'cha' ,'var' ,'str' // 字符型

ls_filter_condition = ls_filter_condition + &

ls_column + ls_compare + "'" + ls_value + "'"

case 'num','dec','lon','rea','ulo' // 数值型

ls_filter_condition = ls_filter_condition + &

ls_column + ls_compare + ls_value

case 'dat','tim' //日期型

ls_filter_condition = ls_filter_condition + "string(" + &

ls_column + ")" + ls_compare + "'" + ls_value + "'"

case else

end choose

else

choose case ls_column_type //根据数据类型设置Filter条件

case 'cha','var','str' // 字符型

ls_filter_condition = ls_filter_condition + &

ls_column + ls_compare + "'" + ls_value + "' " &

+ ls_and_or + " "

case 'num','dec','lon','rea','ulo' // 数值型

ls_filter_condition = ls_filter_condition + &

ls_column + ls_compare + ls_value + " " &

+ ls_and_or + " "

case 'dat','tim' //日期型

ls_filter_condition = ls_filter_condition + "string(" + & ls_column + ")" + ls_compare+ "" + ls_value+ "' " &

+ ls_and_or + " "

case else

end choose

end if

next

dw_query.setredraw(false)

dw_query.setFilter(ls_filter_condition)

if dw_query.filter() = 1 and dw_query.rowcount() > 0 then

ls_column = dw_query_condition.getitemstring(1, 'column_name')

dw_query.setsort(ls_column + ' A')

dw_query.sort()

dw_query.SetColumn(ls_column)

dw_query.selectrow(0,false)

dw_query.selectrow(1,true)

dw_query.setrow(1)

end if

dw_query.setredraw(true)

8、在dw_query的Constractor事件中加入如下脚本:

this.Object.DataWindow.ReadOnly="Yes"

this.settransobject(sqlca)

this.retrieve()

if this.rowcount() > 0 then

this.selectrow(0,false)

this.selectrow(1,true)

this.setrow(1)

end if

9、在cb_all的Clicked事件加入:

dw_query.SetFilter('')

dw_query.Filter()

if dw_query.rowcount() > 0 then

dw_query.selectrow(0,false)

dw_query.selectrow(1,true)

dw_query.setrow(1)

end if

dw_query.SetFocus()

10、在cb_print的Clicked事件加入:

if messagebox("提示信息","确认打印?", question!,Yesno!,1) = 1 then

if PrintSetup () = -1 then

messagebox('出错信息','打印机设置出错!',Exclamation!)

return else dw_query.Print() end if

end if

11、在cb_exit的Clicked事件加入:

close(parent)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有