線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1574
推到 Plurk!
推到 Facebook!

OnCalcField事件的應用

尚未結案
Code168
一般會員


發表:16
回覆:11
積分:5
註冊:2003-02-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-26 15:06:01 IP:202.175.xxx.xxx 未訂閱
各位偉大的先生/女仕: 當欄位的值為另一些欄位的值運算得來的結果時,是否應使用OnCalcField事件最為合適呢? 我作了一個試練, 有Field A,B,C; C=A B;我在OnCalcField事件下,加入以下Code: with DataSource1.dataset do begin fieldbyname('C').value:=fieldbyName('A').value fieldbyName('B').value; end; 我心想更改A,B的值,C會自動改變,但結果非也!我想請教各位先知,是我對OnCalcField的事件理解不對,還是另有錯誤之處! 謝謝! 1. 思考,放鬆,再思考! 2. 練習,學習,再練習! 3, 請教,改錯,再請教! 4. 創新,改進,再創新!
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-26 15:22:27 IP:211.21.xxx.xxx 未訂閱
引言: 各位偉大的先生/女仕: 當欄位的值為另一些欄位的值運算得來的結果時,是否應使用OnCalcField事件最為合適呢? 我作了一個試練, 有Field A,B,C; C=A B;我在OnCalcField事件下,加入以下Code: with DataSource1.dataset do begin fieldbyname('C').value:=fieldbyName('A').value fieldbyName('B').value; end; 我心想更改A,B的值,C會自動改變,但結果非也!我想請教各位先知,是我對OnCalcField的事件理解不對,還是另有錯誤之處! 謝謝! 1. 思考,放鬆,再思考! 2. 練習,學習,再練習! 3, 請教,改錯,再請教! 4. 創新,改進,再創新!
您的用法沒有錯,只是: 您的Field C是Calculated Field也就是您要虛擬一個欄位。 如果不是的話,當然不行。 方法如下:也就是New一Field,Field Type選擇Calculated。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-26 15:31:04 IP:211.74.xxx.xxx 未訂閱
fieldbyName('A')->DBEdit1 fieldbyName('B')->DBEdit2 fieldbyName('C')->DBEdit3 在DBEdit1Exit,然後將DBEdit2.Edit指向DBEdit1Exit. procedure TForm1.DBEdit1Exit(Sender: TObject); begin if DataSource1.dataset.State=dsBrowse then exit; with DataSource1.dataset do begin fieldbyname('C').value:=fieldbyName('A').value fieldbyName('B').value; end; end; TRY TRY SEE
引言: 各位偉大的先生/女仕: 當欄位的值為另一些欄位的值運算得來的結果時,是否應使用OnCalcField事件最為合適呢? 我作了一個試練, 有Field A,B,C; C=A B;我在OnCalcField事件下,加入以下Code: with DataSource1.dataset do begin fieldbyname('C').value:=fieldbyName('A').value fieldbyName('B').value; end; 我心想更改A,B的值,C會自動改變,但結果非也!我想請教各位先知,是我對OnCalcField的事件理解不對,還是另有錯誤之處! 謝謝! 1. 思考,放鬆,再思考! 2. 練習,學習,再練習! 3, 請教,改錯,再請教! 4. 創新,改進,再創新!
Code168
一般會員


發表:16
回覆:11
積分:5
註冊:2003-02-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-26 18:47:38 IP:202.175.xxx.xxx 未訂閱
Channel兄; 根據你所說的,即是field C並不是數據表中的一個欄,即是dataset里的一個欄對嗎?我並不是很明白,你能否給我一個簡單的例子嗎? 1. 思考,放鬆,再思考! 2. 練習,學習,再練習! 3, 請教,改錯,再請教! 4. 創新,改進,再創新!
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-26 22:32:09 IP:203.204.xxx.xxx 未訂閱
Code168, 您好 請參考以下的連結資料,您這個問題前幾天剛好BCB版的資料庫有討論過了。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30977 ======================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-27 10:26:11 IP:211.21.xxx.xxx 未訂閱
引言: Channel兄; 根據你所說的,即是field C並不是數據表中的一個欄,即是dataset里的一個欄對嗎?我並不是很明白,你能否給我一個簡單的例子嗎? 1. 思考,放鬆,再思考! 2. 練習,學習,再練習! 3, 請教,改錯,再請教! 4. 創新,改進,再創新!
沒有錯,Field C不是數據表中的一個欄,是DataSet的一個欄,是虛擬一個欄位讓Delphi自動幫您動態計算出結果。 方法如下:
  • 對TDataSet(TQuery,TTable)用滑鼠左鍵連續點兩下,帶出Field Editor視窗。
  • 用滑鼠右鍵點一下,選擇New Field
  • 按照上面的設定即是產生一個虛擬欄位 C
  • OnCalcField事件是專門在處理Calculated Field,無法處理實際欄位
    procedure TForm1.Table1CalcFields(DataSet: TDataSet);
    begin
      with DataSet do
        fieldbyname('C').value:=fieldbyName('A').value+fieldbyName('B').value;
    end;
    
~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
Code168
一般會員


發表:16
回覆:11
積分:5
註冊:2003-02-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-31 14:00:23 IP:202.175.xxx.xxx 未訂閱
各位: 你們好,多謝你們的寶貴意見和資料,小弟的疑惑已解.真的不好意思,因為最近有其他事做,未能即時回應各位,請見諒! 1. 思考,放鬆,再思考! 2. 練習,學習,再練習! 3, 請教,改錯,再請教! 4. 創新,改進,再創新!
系統時間:2024-06-26 12:00:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!