六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

在PowerBuilder中使用DataStore完成查詢條件的記憶

[摘要]北京延慶某部科技處 王永生 ---- 隨著MIS開發工具的日益完善,人們對信息檢索的要求也越來越高,以往每次查詢時都由用戶輸入,然后進行檢索的方式已越來越無法滿足用戶的要求,許多用戶都希望系統具有自...
北京延慶某部科技處 王永生

---- 隨著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() >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.Object.begin[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)< >"" then
cbx_1.checked=true
sle_1.enabled=true
sle_1.text=bt
end if

if not isnull(source) and trim(source)< >"" 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< >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 >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< 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" >='+"'"
+string(start_day,"yyyy.mm.dd")
+"'"+'and '+'"index"."date"
< ='+"'"+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< 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)

---- 以上程序在Pb6.5、Sybase SQL Anywhere5.0下運行通過,讀者對它稍加修改就可應用在自己開發的MIS系統中。


主站蜘蛛池模板: 一区二区三区国产美女在线播放 | 亚洲欧美综合 | 天天色天天操综合网 | 婷婷丁香激情五月 | 午夜色大片 | 视频二区 调教中字 知名国产 | 亚洲综合免费视频 | 日本美女高清在线观看免费 | 亚洲欧美日韩中文不卡 | 一级做a爰片久久毛片图片 一级做a爰片久久毛片人呢 | 亚洲综合色播 | 亚洲人成www在线播放 | 亚欧在线精品免费观看一区 | 人妖欧美一区二区三区四区 | 亚洲成a人片在线观看播放 亚洲成a人片在线观看www | 欧洲97色综合成人网 | 日韩一区精品视频在线看 | 色网站在线| 日韩欧美在线观看综合网另类 | 亚洲男人的天堂在线播放 | 日本欧美中文字幕 | 天天操天天干天天操 | 日本一区午夜爱爱 | 亚州综合| 亚色一区 | 亚洲欧美手机在线观看 | 天天操天天干天天干 | 诱惑网综合 | 天天添天天射 | 亚洲一区在线免费 | 手机av在线播放 | 午夜高清免费观看视频 | 中文字幕视频一区 | 在线人成精品免费视频 | 日韩中文字幕在线看 | 亚洲一区二区三区免费在线观看 | 日本一片免费观看高清完整 | 日本福利片在线观看 | 速度与激情9完整版免费观看 | 天天做天天爱夜夜爽女人爽宅 | 日韩第八页 |