太大量記錄,想分批讀入Grid中 |
尚未結案
|
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
因為貨品記錄太多資料,在Grid中顯示全部記錄需要很長的時間,所以想分批讀入Grid中,當在Grid中顯示最後/最前一條記錄時,按Grid的Vertial Scroll Bar的下/上箭咀,會讀下/上100條記錄,但SQL句字中是按貨品排序的,同時亦都有Left Join其他表的,在Grid中按標題時,可以順序排序及可以倒序排序,亦都可以按其他欄標題,根據其他欄排序,這些都已經做好,但不知道如何分批讀入及配合這些功能呢?
希望各位高手幫忙,多謝 發表人 - SimonLee 於 2004/11/01 17:30:16
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
我提供一下簡單的思路:
1. 改用 ClientDataset 方式,讀取資料。
2. 修改 TstringGrid 元件。
攔截 WM_MOUSEWHEEL 及 WM_VSCROLL 訊息。
procedure TMyStringGrid.WMVSCROLL(var Message: TWMVScroll); var ScrollInfo: TScrollInfo; begin with Message do begin case TScrollCode(ScrollCode) of scLineUp: scLineDown: scPageUp: scPageDown: scPosition, scTrack: scTop: scBottom: end; end; inherited; end;使用 Dataset.MoveBy 做處理。 |
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
|
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
引言: wameng兄提供了一種作法(又讓小弟受益了 ) 抱歉,插個花,提供個人想法,相關之作法,站上都有相關討論文章可供參考 分批讀入部份可以利用>>< face="Verdana, Arial, Helvetica"> 經過我的編程員測試後,得出以下的結果: 這個方法開始時都會慢的,因為我們的軟件不是Multi-ier的,所以在同一台電腦上又要分身做Application Server的角色,一開始時,Application Server是會將全部記錄讀入,之後才分批地比Client Dataset,所以開始時就要等好久才可以有記錄出現,but anyway, many & many thanks |
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
引言: 個人淺見,你所說的客戶不接受change.jian兄的先以部份資料顯示再作條件查詢方式,而需先看到資料,就不知你的客戶需看到什麼資料,如果可以就以客戶需看到的資料或列出重點性的資料作為條件來顯示而後再由客戶進行條件查詢,是否可行?如果你的客戶要看到全部資料才能作出條件選擇的話,就全部讀取了吧. ========================= 讀萬卷書~不如來K.TOP走一遭 =========================其實客戶都了解我的問題,但他們用戶的知識水平不是十分高,在有情況下要看到最開始那段資料才會作出決定,又或者他們真的需要全部讀出資料,需要讀取全部資料的話,就需要等很長的時間,客戶亦說如果真係解決不來那就無辦法吧,所以我想的是最好是可以解決我標題所說的問題吧! Thank A Lot |
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
請問一下,你所謂軟件不是Multi-ier的,是指你將 apserver 與 client 端放在同一台,還是真的不是Multi-ier架構,而只是 client/server,也就是只有 client 直接去連 db server.
我做的Multi-ier 架構的 Grid 的功能根你描述的功能完全一模一樣,真是英雄所見略同
"因為貨品記錄太多資料,在Grid中顯示全部記錄需要很長的時間,所以想分批讀入Grid中,當在Grid中顯示最後/最前一條記錄時,按Grid的Vertial Scroll Bar的下/上箭咀,會讀下/上100條記錄,但SQL句字中是按貨品排序的,同時亦都有Left Join其他表的,在Grid中按標題時,可以順序排序及可以倒序排序,亦都可以按其他欄標題,根據其他欄排序"
但我的分批讀入是自己寫一個 com 介面,當使用需讀取下一段資料時,並不是透
TClientDataSet 的 PACKETRECORD 去讀取,而是將目前 Grid 的排序條件及最後一筆資料的鍵值傳回 Apserver,再由 apserver 根據這些條件取得下一段資料,在傳回 client 端,由一個 tclientdata.data 來接收,在與 grid 的 dataset 合併,就可以了,不知這是否你要的 如果愛情也有味覺
那麼 有沒有ㄧ種愛
微微泛酸 不太苦澀 有點甜密
嚐起來的滋味讓人想起幸福
Thomas Chiou
------
Thomas Chiou |
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
引言: 請問一下,你所謂軟件不是Multi-ier的,是指你將 apserver 與 client 端放在同一台,還是真的不是Multi-ier架構,而只是 client/server,也就是只有 client 直接去連 db server. 我做的Multi-ier 架構的 Grid 的功能根你描述的功能完全一模一樣,真是英雄所見略同 "因為貨品記錄太多資料,在Grid中顯示全部記錄需要很長的時間,所以想分批讀入Grid中,當在Grid中顯示最後/最前一條記錄時,按Grid的Vertial Scroll Bar的下/上箭咀,會讀下/上100條記錄,但SQL句字中是按貨品排序的,同時亦都有Left Join其他表的,在Grid中按標題時,可以順序排序及可以倒序排序,亦都可以按其他欄標題,根據其他欄排序" 但我的分批讀入是自己寫一個 com 介面,當使用需讀取下一段資料時,並不是透 TClientDataSet 的 PACKETRECORD 去讀取,而是將目前 Grid 的排序條件及最後一筆資料的鍵值傳回 Apserver,再由 apserver 根據這些條件取得下一段資料,在傳回 client 端,由一個 tclientdata.data 來接收,在與 grid 的 dataset 合併,就可以了,不知這是否你要的 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福 Thomas Chiou我的軟件只是Client/Server的,是直接對資料庫讀取資料的,當貨品資料多時,做查詢的視窗就需要很長的時間才會出現,所以想改成分批讀入。 最後,我不是英雄,見笑la Thank You Very Much 發表人 - SimonLee 於 2004/11/05 14:47:31 |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
這樣會不會沒有解了,因為那麼多的資料,光資料庫反應也是要時間的,如果你是用C/S架構,那麼當讀取下一頁資料時,DB本來就會花時間再去找到下一頁的資料啊,尤其是存在DB裡的資料筆數那麼多時,本身反應就不會太快的.你有沒有試一下直接在資料庫的Client端下SQL指令,看看全部資料抓出來會多久? 之前也有類似的經驗,後端DB是Oracle 8.1.7,因為資料量真的很大,光在sql plus裡下sql指令要把資料拉回來就是很久.後來,就是跟user溝通,把可能查詢的欄位寫成程式,然後後端DB同步建立index,才解決那個問題.
引言: 我的軟件只是Client/Server的,是直接對資料庫讀取資料的,當貨品資料多時,做查詢的視窗就需要很長的時間才會出現,所以想改成分批讀入。 最後,我不是英雄,見笑la Thank You Very Much 發表人 - SimonLee 於 2004/11/05 14:47:31 |
SimonLee
一般會員 發表:15 回覆:23 積分:7 註冊:2003-09-20 發送簡訊給我 |
引言: 這樣會不會沒有解了,因為那麼多的資料,光資料庫反應也是要時間的,如果你是用C/S架構,那麼當讀取下一頁資料時,DB本來就會花時間再去找到下一頁的資料啊,尤其是存在DB裡的資料筆數那麼多時,本身反應就不會太快的.你有沒有試一下直接在資料庫的Client端下SQL指令,看看全部資料抓出來會多久? 之前也有類似的經驗,後端DB是Oracle 8.1.7,因為資料量真的很大,光在sql plus裡下sql指令要把資料拉回來就是很久.後來,就是跟user溝通,把可能查詢的欄位寫成程式,然後後端DB同步建立index,才解決那個問題.我試過如果要讀出全部記錄,需要差不多1.45分鐘,但如果我加上了條件只讀頭200條記錄,需要5秒到,我只覺得我這個問題只有分批讀入才可以解決到,希望大家對著分批讀取的方法去解決我的問題,Thank You Very Much引言: 我的軟件只是Client/Server的,是直接對資料庫讀取資料的,當貨品資料多時,做查詢的視窗就需要很長的時間才會出現,所以想改成分批讀入。 最後,我不是英雄,見笑la Thank You Very Much 發表人 - SimonLee 於 2004/11/05 14:47:31 |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |