全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1401
推到 Plurk!
推到 Facebook!

太大量記錄,想分批讀入Grid中

尚未結案
SimonLee
一般會員


發表:15
回覆:23
積分:7
註冊:2003-09-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-01 17:29:11 IP:218.17.xxx.xxx 未訂閱
因為貨品記錄太多資料,在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-01 19:58:02 IP:61.31.xxx.xxx 未訂閱
我提供一下簡單的思路: 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-02 11:27:30 IP:220.134.xxx.xxx 未訂閱
wameng兄提供了一種作法(又讓小弟受益了 ) 抱歉,插個花,提供個人想法,相關之作法,站上都有相關討論文章可供參考 分批讀入部份可以利用
SimonLee
一般會員


發表:15
回覆:23
積分:7
註冊:2003-09-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-02 14:22:58 IP:218.17.xxx.xxx 未訂閱
如果我不想用TClientDataSet,因為我是用TADODataSet的,另外加了TClientDataSet的話,當抄比客戶時,要抄midas.dll給客戶,不是十分方便,有無一個方法是用TADODataSet的。
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-02 15:15:31 IP:61.222.xxx.xxx 未訂閱
除此之外,應該就沒法子了。 如果覺得修改 TstringGrid 元件,很麻煩的話! 建議轉個彎! 使用 TstringGrid 顯示資料 在畫面上添加 [上一頁] [下一頁] 的按鈕{如同本討論區分頁一致} 並顯示 [頁數/總頁數] 在上一頁或是下一頁按下事件中, 再將資料導入至 TStringGrid。 如此一來,TstringGrid 就永遠保持只有一定的筆數。
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-02 16:26:20 IP:61.218.xxx.xxx 未訂閱
個人想法: 如果不想用TClientDataset,那換個方式.改一下操作流程:讓使用者可以設定只看那些部分的貨品記錄(如貨品編號為003開頭之類的),然後把user的條件加入sql指令裡,多設幾個欄位讓user去選擇,以減少拉大量資料到前端的機會.
SimonLee
一般會員


發表:15
回覆:23
積分:7
註冊:2003-09-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-02 16:33:53 IP:218.17.xxx.xxx 未訂閱
引言: 個人想法: 如果不想用TClientDataset,那換個方式.改一下操作流程:讓使用者可以設定只看那些部分的貨品記錄(如貨品編號為003開頭之類的),然後把user的條件加入sql指令裡,多設幾個欄位讓user去選擇,以減少拉大量資料到前端的機會.
多謝提供此方法,其實我已經將此方法對客戶說過,但他們不大接收此方法,他們需要看到資料才可以作出決定,anyway, many thanks
SimonLee
一般會員


發表:15
回覆:23
積分:7
註冊:2003-09-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-02 16:57:19 IP:218.17.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-04 13:19:19 IP:220.134.xxx.xxx 未訂閱
個人淺見,你所說的客戶不接受change.jian兄的先以部份資料顯示再作條件查詢方式,而需先看到資料,就不知你的客戶需看到什麼資料,如果可以就以客戶需看到的資料或列出重點性的資料作為條件來顯示而後再由客戶進行條件查詢,是否可行?如果你的客戶要看到全部資料才能作出條件選擇的話,就全部讀取了吧. ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
SimonLee
一般會員


發表:15
回覆:23
積分:7
註冊:2003-09-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-05 09:17:00 IP:218.18.xxx.xxx 未訂閱
引言: 個人淺見,你所說的客戶不接受change.jian兄的先以部份資料顯示再作條件查詢方式,而需先看到資料,就不知你的客戶需看到什麼資料,如果可以就以客戶需看到的資料或列出重點性的資料作為條件來顯示而後再由客戶進行條件查詢,是否可行?如果你的客戶要看到全部資料才能作出條件選擇的話,就全部讀取了吧. ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
其實客戶都了解我的問題,但他們用戶的知識水平不是十分高,在有情況下要看到最開始那段資料才會作出決定,又或者他們真的需要全部讀出資料,需要讀取全部資料的話,就需要等很長的時間,客戶亦說如果真係解決不來那就無辦法吧,所以我想的是最好是可以解決我標題所說的問題吧! Thank A Lot
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-05 10:06:16 IP:219.80.xxx.xxx 未訂閱
請問一下,你所謂軟件不是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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-05 14:35:11 IP:218.18.xxx.xxx 未訂閱
引言: 請問一下,你所謂軟件不是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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-11-05 15:00:24 IP:61.218.xxx.xxx 未訂閱
這樣會不會沒有解了,因為那麼多的資料,光資料庫反應也是要時間的,如果你是用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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-11-05 15:25:31 IP:218.18.xxx.xxx 未訂閱
引言: 這樣會不會沒有解了,因為那麼多的資料,光資料庫反應也是要時間的,如果你是用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
我試過如果要讀出全部記錄,需要差不多1.45分鐘,但如果我加上了條件只讀頭200條記錄,需要5秒到,我只覺得我這個問題只有分批讀入才可以解決到,希望大家對著分批讀取的方法去解決我的問題,Thank You Very Much
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-11-05 16:34:39 IP:61.218.xxx.xxx 未訂閱
sorry,是我搞錯方向了 <>< face="Verdana, Arial, Helvetica">引言: 我試過如果要讀出全部記錄,需要差不多1.45分鐘,但如果我加上了條件只讀頭200條記錄,需要5秒到,我只覺得我這個問題只有分批讀入才可以解決到,希望大家對著分批讀取的方法去解決我的問題,Thank You Very Much
系統時間:2024-07-01 9:44:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!