線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1918
推到 Plurk!
推到 Facebook!

請問如何在TClientDataSet.Data中搜尋資料

尚未結案
degr
一般會員


發表:22
回覆:36
積分:21
註冊:2002-03-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-08 17:26:15 IP:202.39.xxx.xxx 未訂閱
請問如何在TClientDataSet.Data 搜尋資料 出貨明細表 A.Data已經將資料資料庫 load 下來 然後 將 A.Data 指向 B.Data 現在報表要列印時..某些數據要經過計算.. 如果每一筆計算資料都向,資料庫要資料的話..資料庫負載會很重 所以一開始既將所需要的資料load下來了... 然後指向虛擬的TClientDataSet.Data 現在問題是如何向TClientDataSet.Data 下sql 或是任何方法 找我只要的明細資料就好做加總.. 此動作..只是要將分析功能 轉由 Clinet 端處理...不由資料庫來處理
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-08 17:44:30 IP:203.204.xxx.xxx 未訂閱
引言: 請問如何在TClientDataSet.Data 搜尋資料 出貨明細表 A.Data已經將資料資料庫 load 下來 然後 將 A.Data 指向 B.Data 現在報表要列印時..某些數據要經過計算.. 如果每一筆計算資料都向,資料庫要資料的話..資料庫負載會很重 所以一開始既將所需要的資料load下來了... 然後指向虛擬的TClientDataSet.Data 現在問題是如何向TClientDataSet.Data 下sql 或是任何方法 找我只要的明細資料就好做加總.. 此動作..只是要將分析功能 轉由 Clinet 端處理...不由資料庫來處理
沒有辦法下SQL了,只能用Filter去過濾需要的資料,一般應該是下SQL向資料庫取所需的資料來計算,而不是取回多餘的資料再來過濾。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-08 18:27:31 IP:61.221.xxx.xxx 未訂閱
degr 你好: 所謂的   
引言: 指向虛擬的TClientDataSet.Data
不太了解是< >< > 是動態產生的 > 是暫存在本機的 > 還是放在程式的 >
------
======================
昏睡~
不昏睡~
不由昏睡~
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-08 21:33:51 IP:211.20.xxx.xxx 未訂閱
引言: 現在問題是如何向TClientDataSet.Data 下sql 或是任何方法 找我只要的明細資料就好做加總.. 此動作..只是要將分析功能 轉由 Clinet 端處理...不由資料庫來處理
degr 你好
  一般會用到比較複雜的運算或以SQL很難一次取得所要的結果或運算會重複執行很多次時
才會這麼做,以下提供一個基本流程供你參考,或是把它包成一個Procedure
1.將ClientDataset建立索引
 ClientDataSet1.IndexFieldNames :='Field1;Field2';// 方便後續鎖定某個鍵值且比較快速
2.
With ClientDataSet1 Do Begin
  DisableControls; // 以防萬一
  SetKey;
  FieldByName('Field1').AsString := 'xxxx';
  FieldByName('Field2').AsString := 'yyyy';
  If GotoKey Then Begin
    Total := 0 ;
    // 讓ClientDataSet在相同的Key間跑一遍
    While (not Eof) And (FieldByName('Field1').AsString = 'xxxx')
                    And (FieldByName('Field2').AsString = 'yyyy') Do Begin
      .....其他運算
      Total := Total FieldByName('Total').AsFloat;
      next;
    End;
    EnableControls; // 如果沒有連到資料感知元件時可以不理它
  End;
  // 此時Total就是你要的結果
End;
degr
一般會員


發表:22
回覆:36
積分:21
註冊:2002-03-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-08 23:45:05 IP:210.192.xxx.xxx 未訂閱
Chance36 大大 你好 你說的正是我要做的方式...SQL並沒辦法一次取得我要的資料 所以才會 反覆跟資料庫要資料.... 就如同出貨會出很多不同批號的產品...可是卻是同一產品料號喔... 訂單量大時,就會有這樣的結果 由這可知...如果是月查詢...分sales,分週訂單量,月累績訂單量,週出貨量, 月累績出貨量... 都是在同一報表出現.....還分客戶說....跟分未出貨額 這我還要想想 如何做起... 我的目前做法 是用兩個sql 分別取出 月訂單, 月出貨 月包含週...
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-09 00:09:01 IP:203.204.xxx.xxx 未訂閱
引言: 這我還要想想 如何做起... 我的目前做法 是用兩個sql 分別取出 月訂單, 月出貨 月包含週...
degr 你好 提供你幾個想法,給你參考 1.依條件取得最大公約數,讓SQL一次取得最少的全部相關資料錄及欄位 如Select a.Qnty, // 要計算數量 a.Price, //要計算金額 b.Cust_No, // 要分客戶 b.InDate, //要分月份、週‧. b.Sale_no,//要分Sales ... //其他必要的欄位 From OrderD a Join OrderM b ON (a.Order_no=b.OrderNo) // 訂單檔關聯 Where ....... //依資料條件過濾資料 如此即可取得所有必須的資料,然後跑個迴圈全部ReView一遍算出所有相關的數據 2.承接此資料的ClientDataSet及產生報表檔用的ClientDataSet,由於它不會有更新回資料庫的需求,故千萬記得要將其LogChange的屬性設為False,才不會產生Delta的資料造成記憶體的浪費。
degr
一般會員


發表:22
回覆:36
積分:21
註冊:2002-03-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-12 12:00:18 IP:202.39.xxx.xxx 未訂閱
Chance36  大大    我問題可以解決了... sql 先排序過在 locate 在 next 就可以了....謝謝 Chance36大大 給的靈感...
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-12 20:12:19 IP:211.20.xxx.xxx 未訂閱
引言: sql 先排序過在 locate 在 next
degr 你好 如果資料筆數很多的話,將要locate的欄位建立動態索引(不是SQL的Order By如下程式碼),你會發現不可思議的快,當然資料量少是沒什麼感覺(沒什麼差別) ClientDataSet1.IndexFieldNames :='Field1;Field2;Field3...'; 參考看看!!
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-04-30 13:44:57 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-04 4:06:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!