組合查詢 (轉)
一、建一個外部資料來源的data,取名為: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(ca)
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鍵(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.row(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)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988921/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 組合查詢(UNION)
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- [MYSQL -17]組合查詢MySql
- MySQL全面瓦解11:子查詢和組合查詢MySql
- SQL 兩個表組合查詢SQL
- MySQL入門系列:查詢簡介(七)之組合查詢MySql
- 聊聊mysql的多列組合查詢MySql
- 【oracle 效能優化】組合索引查詢。Oracle優化索引
- 17. 使用MySQL之組合查詢MySql
- 組合索引的前導列與查詢——ORACLE索引Oracle
- SQL Server對組合查詢結果排序方法SQLServer排序
- 帶有儲存過程的組合查詢儲存過程
- 分組查詢
- dev treelist和searchcontrol組合模糊查詢用法dev
- 使用組合索引處理包含空值的查詢索引
- 合併查詢
- Oracle中分組查詢時keep的使用[轉][Oracle
- Elasticsearch複合查詢——boosting查詢Elasticsearch
- MySQL--基礎知識點--65--組合查詢MySql
- 呼叫域名註冊api,查詢所有域名組合指令碼API指令碼
- MySQL--操作簡記(聯結表,組合查詢(UNION))MySql
- [Mysql 查詢語句]——分組查詢group byMySql
- group by分組查詢
- IT組合和專案組合管理(轉)
- 【SQL】Oracle查詢轉換之檢視合併SQLOracle
- jpa動態查詢與多表聯合查詢
- WF-1 FIND NOTIFICATION 下組合條件查詢無結果
- C#動態查詢:巧用Expression組合多條件表示式C#Express
- Oracle查詢轉換(一)簡單檢視合併Oracle
- Oracle查詢轉換(二)複雜檢視合併Oracle
- sqlserver新增查詢 表、欄位註釋,組合查詢所有的使用者、表名、表註釋SQLServer
- thinkPHP多表聯合查詢PHP
- Elasticsearch 複合查詢——多字串多欄位查詢Elasticsearch字串
- 水煮oracle31----連線查詢&合併查詢Oracle
- redo日誌組資訊查詢
- sql server分組查詢示例SQLServer
- Oracle查詢轉換(三)外連線檢視合併Oracle
- 注意:Oracle中的聯合主鍵查詢問題(轉)Oracle