全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1947
推到 Plurk!
推到 Facebook!

如何動態加入 CaclField 欄位

答題得分者是:sryang
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2018-06-30 10:19:00 IP:118.169.xxx.xxx 未訂閱
請問各位:

誠如標題, 想要達成動態加入一組 CaclField 的欄位, 但不若想像中的那種簡單方式,
因為我的 Query1 中的 select 欄位是可變動性的, 由 Query1.SQL.Text 來決定,
例如 select A,B,C,D,E from myTable where ...
然而 A,B,C,D,E 又不是單純的欄位, 每一個可能都是透過 sum(xxxxx) as A, sum(A B) as B....等等之類的做法,
以往我都是把語法下好(在DataModule 中指定好 SQL, 然後再在 FieldEditor 中把欄位定義出來), 這樣的做法, 我可以在 FieldEditor 中新增一個 CalcField F, 而 F 是由其他 Table2, Table3 所計算得來的值,

但現我捨棄了 FieldEditor 的定義, 全部改用 FieldByName('A') 來呼叫, 但如此一來, 我便無法在 FieldEditor 中加入 CalcField 的欄位定義,

請問, 我要如在 Query1.Open後, 取得 目前 FieldList (A,B,C,D,E)之後, 能再加一個 F 欄位進去, 查了好久的網路, 雖然探討動態加入CalcField 的討論很多, 但都必須在 Quyer1.Close 的狀態下才能進行 FieldDef.Update 或者 Fields.Add, 但如果在 Close 的情況, 我就無法得知最終的 FieldList 結果, 所以該如何在 Open 的情況下, 能順利加入一個CalcField 實為困擾,
我目前能想得到的是把 select 後所有的欄位, 在Open前全部用 for...next 完全人工複刻上去, 但又因為每一個 field 都是很複雜的運算, 在不同情況下又有不同的 FieldList, 而我只是要加進去一個 F CalcField 而已, 所以除了這個方式, 有沒有其他可行的辦法?

我目前使用以下的方法

宣告一個 THackQuery
type
THackQuery = class(TQuery);

在所要定義的 DataModule on_Create 中定義
var F : TFloatField;
begin
Query1.FieldDefs.Update;
THackQuery(Query1).CreateFields; // 創建原有Query 的 Fields
F := TFloatField.Create(Query1);
F.FieldName := 'PREVF';
F.FieldKind := fkCalculated;
F.DataSet := Query1;
Query1.FieldDefs.Update;

這樣是可以把 PREVF 欄位加入

編輯記錄
P.D. 重新編輯於 2018-06-30 13:46:19, 註解 無‧
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2018-06-30 17:46:30 IP:59.127.xxx.xxx 未訂閱
對,只有這個方法!

DataSet 裡的 FieldList 要嘛 Open 前是空的,Open 時會自動建立
要嘛就是都建立好 FieldList 裡的 field 再 Open

===================引 用 P.D. 文 章===================
我目前能想得到的是把 select 後所有的欄位, 在Open前全部用 for...next 完全人工複刻上去, 但又因為每一個 field 都是很複雜的運算, 在不同情況下又有不同的 FieldList, 而我只是要加進去一個 F CalcField 而已, 所以除了這個方式, 有沒有其他可行的辦法?
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2018-07-07 11:32:34 IP:118.169.xxx.xxx 未訂閱
再搜尋一下網路看來是真的沒有其他方法了, 感謝 syrang 說明
系統時間:2024-04-29 1:17:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!