請問TClientDataSet之AggregateField的GroupingLevel屬性如何用 |
答題得分者是:Rain
|
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
關於GroupingLevel在Delphi 的幫助文件中給出了很詳細的說明:
GroupingLevel property (TAggregateField)
Description Use GroupingLevel to indicate the groups of records over which the field’s
aggregate is calculated. When GroupingLevel is 0 (the default), the aggregate summarizes all the records in the client dataset. When GroupingLevel is greater than 0, the aggregate summarizes each group of records that has the same values on the first GroupingLevel fields of the index. GroupingLevel can be any value from 0 to the number of fields in the index specified by IndexName. 當GroupingLevel為預設值0時,對所有的記錄進行合計,不為0時,大概正適合您的這個需求吧,根據您所要的,寫了一段代碼,參考看看:
function xGetAddupValue(cds: TClientDataSet; const ASumField: string; const AIndexField: string = ''; const AGroupingLevel: Integer = 0): Variant; const AIndexName = 'Index1'; var Addup: TAggregate; begin Addup := TAggregate.Create(cds.Aggregates, cds); try Addup.Expression := Format('SUM(%s)', [ASumField]); if AIndexField <> '' then begin cds.AddIndex(AIndexName, AIndexField, [], '', '', 0); cds.IndexName := AIndexName; Addup.IndexName := AIndexName; end; Addup.GroupingLevel := AGroupingLevel; Addup.Active := True; Result := Addup.Value; finally Addup.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := xGetAddupValue(ClientDataSet1, 'buy_qty', 'buy_no', 1); end;//非常抱歉,發現我的代碼中有一個地方寫錯了,把AIndexField弄成AIndexName了,剛改了過來(紅色部分),不好意思 發表人 - Rain 於 2003/07/28 17:13:27 |
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
|
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |