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

請問一下關於Calculated欄位的問題

答題得分者是:cancer
kndd
一般會員


發表:4
回覆:8
積分:2
註冊:2004-05-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-17 17:34:38 IP:60.248.xxx.xxx 未訂閱
小弟是delphi新手
在clientdataset 中 設立一個Calculated欄位
想透過判斷來對它作操作
但dbgrid對應的欄位都不會顯示出值來
用的是delphi5 語法如下
if chk.fieldbyname('chk').value = chk2.fieldbyname('chk2').value then chk2.fieldbyname('calcu').asstring :='有';
chk這個calculated欄位不用寫回資料庫~只要正確的秀到dbgrid上就行了
謝謝

小弟也有想過在clientdataset chk這欄位中的ongettext中直接做text:='有'
不過因為還要做sql語法的篩選所以會造成效能低落且一直重覆執行
如果用變數判斷觸發執行的話,則chk這欄位中的資料只有會顯示一次
只要滑鼠去點到dbgrid裡的cell後就會消失不見(dbgrid有開dgrowselect做其他功能)
編輯記錄
kndd 重新編輯於 2011-05-17 18:32:13, 註解 無‧
kndd 重新編輯於 2011-05-17 18:38:32, 註解 無‧
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-17 18:17:35 IP:60.248.xxx.xxx 未訂閱
Hi 

試試在ClientDataSet.OnCalcFields事件中的處理

===================引 用 kndd 文 章===================
在clientdataset 中 設立一個Calculated欄位
但dbgrid對應的欄位都不會顯示出值來
用的是delphi5 語法如下
if chk.fieldbyname('chk').value = chk2.fieldbyname('chk2').value then chk2.fieldbyname('calcu').asstring :='有';
kndd
一般會員


發表:4
回覆:8
積分:2
註冊:2004-05-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-18 08:14:39 IP:60.248.xxx.xxx 未訂閱
謝謝pedro的回答
不過我在這事件中加入程式碼後
整個程式就關掉了,還在找原因
謝謝~

===================引 用 pedro 文 章===================
Hi

試試在ClientDataSet.OnCalcFields事件中的處理

===================引 用 kndd 文 章===================
在clientdataset 中 設立一個Calculated欄位
但dbgrid對應的欄位都不會顯示出值來
用的是delphi5 語法如下
if chk.fieldbyname('chk').value = chk2.fieldbyname('chk2').value then chk2.fieldbyname('calcu').asstring :='有';
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-05-18 08:52:40 IP:220.128.xxx.xxx 未訂閱
Hi, 也只能在 OnCalcFields 修改計算欄位的值。不建議直接用 Variant 來比較,之前我同事這樣寫,常會出錯,都被我改掉,要先判斷是不是 null,
if (Value1 <> null) and (Value2 <> null) then
begin
// 再來比較兩個值
end;
kndd
一般會員


發表:4
回覆:8
積分:2
註冊:2004-05-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-05-18 09:05:06 IP:60.248.xxx.xxx 未訂閱
謝謝cancer的回覆
想請教一下如果要在該計算欄位直接寫入資料的話要怎麼寫呢?
目前是用一變數來判斷是否要寫入,事前的查詢寫在另外的地方
不過不曉得能不能觸發OnCalcField事件

===================引 用 cancer 文 章===================
Hi, 也只能在 OnCalcFields 修改計算欄位的值。不建議直接用 Variant 來比較,之前我同事這樣寫,常會出錯,都被我改掉,要先判斷是不是 null,
if (Value1 <>null) and (Value2 <>null) then
begin
// 再來比較兩個值
end;
kndd
一般會員


發表:4
回覆:8
積分:2
註冊:2004-05-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-05-18 14:39:32 IP:60.248.xxx.xxx 未訂閱
謝謝 pedro與cancer的幫忙
終於弄出來了~也了解到Calculated欄位跟OnCalcFields的用法
真的很感謝!!!
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-05-18 19:23:16 IP:220.128.xxx.xxx 未訂閱
謝謝大大給分,要填入計算欄位,一定要在 OnCalcField 裡面寫,在其他事件寫,會出錯,包含 BeforePost,這我有試過。
OnCalcField 引發時間很多,查一下 Delphi 說明檔,包括資料有改變、切換資料列。
===================引 用 kndd 文 章===================
謝謝cancer的回覆
想請教一下如果要在該計算欄位直接寫入資料的話要怎麼寫呢?
目前是用一變數來判斷是否要寫入,事前的查詢寫在另外的地方
不過不曉得能不能觸發OnCalcField事件
系統時間:2024-04-25 8:29:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!