首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 資料集計算欄位累加:實現資料庫欄位動態求和

     編輯:Delphi

應用場景

報表、統計功能常需對資料集某數值欄位 (如「金額」) 做即時累加。利用 TDataSet.OnCalcFields 事件搭配全域變數,可在資料集瀏覽過程中自動完成求和。

實作步驟

  1. 宣告全域累加變數 var GrandTotal: Double;
  2. 在 Table1.OnCalcFields 撰寫累加邏輯
  3. 重新查詢前將 GrandTotal := 0 歸零

核心程式碼

var
  GrandTotal: Double;  // 全域累加器

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
var
  CurrentAmount: Double;
begin
  // 取得當前記錄「金額」欄位值
  CurrentAmount := Table1.FieldByName('金額').AsFloat;
  
  // 累加
  GrandTotal := GrandTotal + CurrentAmount;
  
  // 即時顯示於標籤 (格式化保留 2 位小數)
  Label1.Caption := FormatFloat('#,##0.00', GrandTotal);
end;

// 重新查詢/重置時呼叫
procedure TForm1.ResetTotal;
begin
  GrandTotal := 0;
  Label1.Caption := '0.00';
  Table1.Refresh;  // 觸發 OnCalcFields 重算
end;

注意事項

  • OnCalcFields 在資料集 每次讀取記錄 時觸發,包含游標移動、刷新、篩選等操作
  • 若資料集為單向游標 (UniDirectional = True),累加邏輯仍有效,但無法回溯
  • 大量資料建議改用 SQL SUM() 聚合函數於資料庫端運算,效能更佳
  • 多執行緒環境下需加鎖保護 GrandTotal

進階:支援多欄位同時累加

type
  TTotalRec = record
    Amount, Tax, Discount: Double;
  end;

var
  Totals: TTotalRec;

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
  Totals.Amount   := Totals.Amount   + Table1.FieldByName('金額').AsFloat;
  Totals.Tax      := Totals.Tax      + Table1.FieldByName('稅額').AsFloat;
  Totals.Discount := Totals.Discount + Table1.FieldByName('折扣').AsFloat;
  
  LabelAmount.Caption   := FormatFloat('#,##0.00', Totals.Amount);
  LabelTax.Caption      := FormatFloat('#,##0.00', Totals.Tax);
  LabelDiscount.Caption := FormatFloat('#,##0.00', Totals.Discount);
end;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved