我有一個計算過的“余額”欄位,它顯示兩個資料集欄位之間的余額,我使用下一個代碼來計算它的值:
var
Balance : Currency;
...
procedure TMyForm.MyQueryCalcFields(DataSet: TDataSet);
begin
if MyQuery.FieldByName('MyFirst Field').AsCurrency > 0 then
Balance := Balance MyQuery.FieldByName('MyFirst Field').AsCurrency;
if MyQuery.FieldByName('MySecond Field').AsCurrency > 0 then
Balance := Balance-MyQuery.FieldByName('MySecond Field').AsCurrency;
MyQuery.FieldByName('Balance').AsCurrency := Balance;
end;
我曾經TDBGrid顯示我的查詢結果,dbgrid 顯示正確的值,直到我開始滾動它的垂直滾動條,在這種情況下它顯示錯誤的值。
我嘗試將“0”分配給余額,但它是相同的(開始滾動時值錯誤)。
如何讓 dbgrid 繼續顯示正確??的值?
uj5u.com熱心網友回復:
OnCalcField事件處理程式專為僅依賴于當前記錄值的計算而設計。
如果您使用的資料集類允許這樣做,我建議您在加載資料后立即計算余額欄位,例如:
var
Balance : Currency;
begin
Balance := 0;
MyQuery.DisableControls();
try
//loading data
MyQuery.Open;
//calculating balance
while(not MyQuery.Eof) do
begin
MyQuery.Edit;
Balance := Balance MyQuery.FieldByName('MyFirst Field').AsCurrency - MyQuery.FieldByName('MySecond Field').AsCurrency;
MyQuery.FieldByName('Balance').AsCurrency := Balance;
MyQuery.Post;
MyQuery.Next;
end;
MyQuery.First;
finally
MyQuery.EnableControls();
end;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496409.html
