領導讓實作資料分頁顯示,每頁顯示30行資料,第一頁1-30行,點下一頁顯示30-60行的資料,請問高手怎么實作?盡量的詳細哦,剛入門不久,多多照顧哦,這個程式決定我作業是否能轉正,所以大家盡量幫忙,多謝大家!
uj5u.com熱心網友回復:
我的想法,二個思路 ,你試下看可以不1. 每次回傳30行 ,這個要使用sql陳述句來實作 ,sqlserver 中結合top實作 ,oracle 中結合 rownum 實作, 這個sql陳述句的寫法 ,你可以搜索 分頁 ,又很多web語言的分頁的例子,打開看看 ,不要看web陳述句 ,就找里面的sql陳述句 ,很多的,其中一個 http://hi.baidu.com/156544632/blog/item/10c982b4966c91778ad4b25e.html
2. 直接retrieve()出來所有的資料,然后再 filter(),使用這個方法需要再資料視窗的sql陳述句里面加一個列 ,如oracle資料庫 可以加 rownum as seq(sqlserver中我不知道了) ,這個每行就又一個序號 , 在你第一個retrieve 之后 ,就可以使用 setfilter(" seq <= 30 ") 然后 filter ,第二次可以使用 setfilter(" seq > 30 and seq <=60 ") ,然后filter() ,以后的自己構造一個運算式就可以了
希望對你有用 ,pb函式不懂的使用 F1 搞定 ,別的可以上網直接查詢
uj5u.com熱心網友回復:
如果你用PB11的話,做成B/S的話,太容易實作了,資料視窗本身就支持,只要在編譯的時候設定每頁顯示的行數為30即可如果想應附領導,建議你資料全部檢索出來(select陳述句中加一個空列別名為row_num),然后把row_num用一個回圈設定成行號
再用setfilter設定條件來顯示顯示的資料,如顯示第5頁,可以setfilter("row_num > 150 and row_num <= 180")即可
如果你真做的比較好的話,就需要按需要檢索資料,oracle可以用rownum來實作你的要求
假如要回傳前5條記錄:
select * from tablename where rownum<6;(或是rownum <= 5 或是rownum != 6)
假如要回傳第5-9條記錄:
select * from tablename
where …
and rownum<10
minus
select * from tablename
where …
and rownum<5
order by name
選出結果后用name排序顯示結果。(先選再排序)
注意:只能用以上符號(<、<=、!=)。
select * from tablename where rownum != 10;回傳的是前9條記錄。
不能用:>,>=,=,Between...and。由于rownum是一個總是從1開始的偽列,Oracle 認為這種條件 不成立,查不到記錄.
另外,這個方法更快:
select * from (
select rownum r,a from yourtable
where rownum <= 20
order by name )
where r > 10
這樣取出第11-20條記錄!(先選再排序再選)
在oracle資料庫中查詢結果的行號使用偽列ROWNUM表示(從1開始)。但rownum是在查詢之后排序之前賦值的,所以查詢employee按birthday排序的第100到120條記錄應該這么寫:
Java代碼
select * from(
select my_table.*, rownum as my_rownum from (
select name, birthday from employee order by birthday
)my_table where rownum <120
) where my_rownum>=100
select * from(
select my_table.*, rownum as my_rownum from (
select name, birthday from employee order by birthday
)my_table where rownum <120
) where my_rownum>=100
另外對記錄的頁數演算法應該是:
page = (rowCounts + pageSize-1) /pageSize;
可以參考
http://hi.baidu.com/aztack/blog/item/d842686079012a40ebf8f8f9.html
http://rdc.taobao.com/blog/dba/html/67_oracle_fenye.html
uj5u.com熱心網友回復:
答:使Datawindow每頁顯示固定行---- 第一步:增加一個計算列,此計算列必須放在Detail段,Expression中輸入: ceiling(getrow()/30) <--這里30還可以用全域函式取代,這樣可以允許用戶任意設定每頁列印多少行。
---- 第二步:定義分組,選擇選單Rows->Create Group...
---- 按計算列欄位分組,并一定將check box-->New Page On Group Break選中。
---- 第三步:將此計算列設為不可視。
uj5u.com熱心網友回復:
問題補充:我用的pb9.0,ASA資料庫。多謝大家幫忙!
uj5u.com熱心網友回復:
做一個資料視窗每頁能直接顯示20行,就可以分頁了uj5u.com熱心網友回復:
學習uj5u.com熱心網友回復:
大家說了這么多了 ,你asa資料庫就不能變通一下嗎 ,如果真的沒有那些控制欄位 ,就在pb中控制好了uj5u.com熱心網友回復:
3樓高見,領教了uj5u.com熱心網友回復:
3樓的回答 不對門 ,滾動條一拉就露餡了uj5u.com熱心網友回復:
呵呵,滾動條一拉就露餡了uj5u.com熱心網友回復:
大家看清楚樓主的要求
第一頁1-30行,點下一頁顯示30-60行的
相應的用
dw_1.ScrollPriorPage()
dw_1.ScrollNextPage()
實作翻頁
根本不用滾動條
uj5u.com熱心網友回復:
我也想做分頁顯示的,可是沒做出來,這句是加在哪啊dw_1.ScrollPriorPage()
我看別人做的是在資料表里加按鈕控制元件,把資料視窗放到表單里,然后在表單里輸入相關的代碼,可是我沒做出來。。
uj5u.com熱心網友回復:
除自定義按鈕外資料視窗里的按鈕有其固有的事件和代碼不需要寫代碼下面兩句代碼是視窗里兩個按鈕的代碼
dw_1.ScrollPriorPage() //上一頁
dw_1.ScrollNextPage() //下一頁
uj5u.com熱心網友回復:
這個函式是直接用來分頁的??那每頁的記錄數怎么設定的啊??
求教
uj5u.com熱心網友回復:
三樓正確uj5u.com熱心網友回復:
3樓正解uj5u.com熱心網友回復:
大家都說3樓的好,但是有個問題就是如果資料量大的話,3樓的辦法不好,如果并發的人多有可能把應用服down掉,還是1樓的第一種方法好uj5u.com熱心網友回復:
正解,3+11樓uj5u.com熱心網友回復:
直接用資料庫的sql陳述句實作,這樣性能好,(實作方法:通過getsql決議出datawindow的sql陳述句,把該陳述句拼裝成對應資料庫的分頁sql寫法,可以上網搜一下),然后把資料select到一個txt檔案中,然后再把txt的內容匯入到datawindow中即可,注意sql陳述句的寫法,可以網上搜一下uj5u.com熱心網友回復:
定義一個計算欄位,命名為‘cl_page’,內容如下:ceiling( cumulativeSum( 1 for all) / 30 )
然后再create group 反cl_page加進去就可以了
uj5u.com熱心網友回復:
我也在做分頁但不知道怎么入手。。這個方法的計算列在哪里寫啊,還有如何顯示一共多少頁當前多少頁上翻下翻如何操作,
uj5u.com熱心網友回復:
好強大.uj5u.com熱心網友回復:
比較笨的方法。。使用存盤程序。。。得到的資料 檢測下行數。。少的就插入空行直到 每頁頂滿。。然后 在 dw中 根據 頁號 欄位 分組顯示。。。并設定 每組 顯示在一個新頁上。。。呵呵轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/65191.html
標籤:控件與界面
