ADOQueryCalcFields 問題 |
尚未結案
|
chubby
一般會員 發表:43 回覆:65 積分:21 註冊:2003-05-13 發送簡訊給我 |
嗨站友,我有一個不解問題 T:=Extended;
如:
借方金額 貸方金額 餘 額
debitmoney lendermoney remainingsum
補充說明:(debitmoney,lendermoney,remainingsum 是fileds editor 來新增的計算性欄位, FieldType 為Calculated ) procedure Form1.ADOQuery3CalcFields(DataSet: TDataSet);
var T:Char;
begin
T:=ADOQuery2.FieldByName('htype').AsString[1];
case T of
'1':begin
if DataSet.FieldByName('dltype').AsString = '1' then begin
DataSet.FieldByName('debitmoney').Value:=DataSet.FieldByName('DLMONEY').Value;
ST:=ST+DataSet.FieldByName('debitmoney').AsFloat;
end
else
begin
DataSet.FieldByName('lendermoney').Value:=DataSet.FieldByName('DL_MONEY').Value;
ST:=ST-DataSet.FieldByName('lendermoney').AsFloat;
end;
end;
end;
DataSet.FieldByName('remainingsum').Value:=ST;
當dbgrid 按PageUp 或 PageDown 時在回上一頁,原remainingsum 值就會不對
因他是加減累計下來,可說是變數,如果要用select * into test ...先去填
remainingsum值在show出來,好像比較不適用,因我不止單一代號
如
93.05.01 2500 2500
93.05.02 500 2000
93.05.03 1000 3000
93.05.04 200 2800
........ 發表人 - chubby 於 2004/09/06 17:15:27
|
chubby
一般會員 發表:43 回覆:65 積分:21 註冊:2003-05-13 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi chubby 兄您好:
有沒有想過不要使用CalcField, 而是使用虛擬欄位, 並在OnAfterOpen後, 用回圈填值. 譬如SQL下法
Select F1, F2, F3, ' ' as F4其中F4為虛擬欄位AfterOpen後 ADOQuery2.First while Not ADOQuery2.Eof do begin ADOQuery2.Edit; ADOQuery2.FieldByName('F4').AsInteger := ..... ADOQuery2.Next; end;記得將Query屬性設為Batch Mode 我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
chubby
一般會員 發表:43 回覆:65 積分:21 註冊:2003-05-13 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
chubby
一般會員 發表:43 回覆:65 積分:21 註冊:2003-05-13 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
chubby 你好
在逐筆運算的前後用AdoQuery2.DisableCOntrols;及Adoquery2.EnableCOntrols;包住即可 AfterOpen後 AdoQuery2.DisableControls; ADOQuery2.First while Not ADOQuery2.Eof do begin ADOQuery2.Edit; ADOQuery2.FieldByName('F4').AsInteger := ..... ADOQuery2.Next; .... AdoQuery2.EnableControls;_______________________________________ 深藍的魚,祝您好運..........連連 |
chubby
一般會員 發表:43 回覆:65 積分:21 註冊:2003-05-13 發送簡訊給我 |
Chance36 版主你好
[code]
AfterOpen後
AdoQuery2.DisableControls;
ADOQuery2.First
while Not ADOQuery2.Eof do begin
ADOQuery2.Edit;
ADOQuery2.FieldByName('F4').AsInteger := .....
ADOQuery2.Next;
end;
可以了,謝謝版主 我本來用(debitmoney,lendermoney,remainingsum 是fileds editor 來新增的計算性欄位, FieldType 為Calculated )
ADOQueryCalcFields 做第一頁dbgrid 速度很快,可是有捲頁動作時,remainingsum值就會回覆到debitmoney或lendermoney 沒有做加總動作
,我知在ADOQueryCalcFields是不可行的,試想在dbgrid捲頁時對全區變數
來做加減,當dbgrid捲頁一筆,全區變數先做加減remainingsum=全區變數
,可是pageup,pagedn做不出來,宣告失敗
procedure TForm1.ADOQuery2CalcFields(DataSet: TDataSet);
begin
if DataSet.FieldByName('dl_type').AsString = '1' then begin
DataSet.FieldByName('debitmoney').Value:=DataSet.FieldByName('DL_MONEY').Value;
Sa:=Sa DataSet.FieldByName('debitmoney').Value;
end
else
begin
DataSet.FieldByName('lendermoney').Value:=DataSet.FieldByName('DL_MONEY').Value;
Sa:=Sa DataSet.FieldByName('lendermoney').Value;
end;
DataSet.FieldByName('tax').Value:=Sa;
end;
如果能在dbgrid做捲動時能關掉sa加總就應可以,可是我做不出來 請問版主依版主經驗是否有更好做法,因 while ..再速度上,
在access database 筆數多蠻慢
ms-sql還好
_______________________________________ 發表人 - chubby 於 2004/09/08 09:44:30
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 請問版主依版主經驗是否有更好做法,因 while ..再速度上, 在access database 筆數多蠻慢 ms-sql還好chubby 你好 依你的需求來看,與下列連結的問題蠻類似的,不過沒麼複雜,若依我的經驗(其實是習慣,沒有絕對的對與錯、好與不好),我幾乎都用TClientDataSet來解決資料集的複雜運算問題,即使目前不需要,但預期會有這個需求時,一樣還是用TCLientDataSet來處理問題。 【問題】如何計算balance? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=50681 另外While 速度慢的問題,不管使用TTable、TQuery、TAdoDataSet等資料集元件,由於它都會連著資料表格,所以使用While 跑迴圈時,多少都會影響速度,這是可以理解的;但使用TClientDataSet時,因為它可以與資料表斷開,且所有的資料都是在記憶體中運作,所以速度絕對會比其他資料集元件快,若再配合ClientDataSet的動態索引時,那更是如虎添翼(快的沒話說!),唯一要注意的是,從資料表取得的資料筆數不要太大(一般來說一萬筆以內沒有明顯的差異,兩萬筆以上就會有感覺了,但還是比其他資料集元件快),具體數據我就沒測了。 或者你可以用[ClientDataSet]在本站搜尋,會有一堆的討論供你研究,你評估看看吧! _______________________________________ 深藍的魚,祝您好運..........連連 發表人 - chance36 於 2004/09/09 01:46:02 |
chubby
一般會員 發表:43 回覆:65 積分:21 註冊:2003-05-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |