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

ClientDataSet 在 onGetText 的問題~

尚未結案
eightball
一般會員


發表:1
回覆:5
積分:1
註冊:2004-11-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-24 18:46:00 IP:220.130.xxx.xxx 未訂閱
請教一下各位大大~ 在使用 ClientDataSet 的 onGetText 的 Events 時.. 如何避免一直執行 onGetText 的 Events ~ 假設在第一次執行查詢的動作時,只執行一次該 Events . 然後再來就是內容有異動時再執行一次 onGetText 的Events ... 有沒有辦法做到呢...?
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-25 00:45:58 IP:59.104.xxx.xxx 未訂閱
你應該是在 DBEdit 的 OnExit 的事件上寫上你的東西才對. 這樣只要一離開 DBEdit 他就會去執行事件,去檢查輸入有沒有正確. 不然你也可以放一個布林變數,當變數 = True 時,表示已經執行過, 不要再執行了,下次可以再執行時,重新把這個變數設成 False.
eightball
一般會員


發表:1
回覆:5
積分:1
註冊:2004-11-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-25 08:16:30 IP:61.221.xxx.xxx 未訂閱
引言: 你應該是在 DBEdit 的 OnExit 的事件上寫上你的東西才對. 這樣只要一離開 DBEdit 他就會去執行事件,去檢查輸入有沒有正確. 不然你也可以放一個布林變數,當變數 = True 時,表示已經執行過, 不要再執行了,下次可以再執行時,重新把這個變數設成 False.
您好~ 感謝您的回答,但是我是使用 DBGrid ,直接由DBGrid 上面去 修改,我也有想過使用參數來控制 onGetText 的執行, 但是好像不是最好的方法,, 所以再請教各位沒有沒其它的好方法~
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-25 09:25:05 IP:147.8.xxx.xxx 未訂閱
引言: 假設在第一次執行查詢的動作時,只執行一次該 Events . 然後再來就是內容有異動時再執行一次 onGetText 的Events ...
??? OnGetText is used to determine the DisplayText of that field. Perhaps you should try other event like AfterPost? Or try OnDataChange event of your datasource? http://pywong.hk.st http://www.lazybones.ca
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-25 09:43:06 IP:220.130.xxx.xxx 未訂閱
那還不是一樣意思? 換湯不換藥而已,DBGrid 就改成在 OnColExit 事件上寫就好了嘛~~幹嘛腦筋轉不過來? 
eightball
一般會員


發表:1
回覆:5
積分:1
註冊:2004-11-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-25 09:58:20 IP:61.221.xxx.xxx 未訂閱
引言:
引言: 假設在第一次執行查詢的動作時,只執行一次該 Events . 然後再來就是內容有異動時再執行一次 onGetText 的Events ...
??? OnGetText is used to determine the DisplayText of that field. Perhaps you should try other event like AfterPost? Or try OnDataChange event of your datasource? http://pywong.hk.st http://www.lazybones.ca
嗯.. procedure TDMhehg.CD2exe_manGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text := GetEmpNam(Sender.AsInteger); end; 我的目的就是不要讓它一直去 run 這個 GetText 的動作..
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-25 10:09:23 IP:147.8.xxx.xxx 未訂閱
引言:嗯.. procedure TDMhehg.CD2exe_manGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text := GetEmpNam(Sender.AsInteger); end; 我的目的就是不要讓它一直去 run 這個 GetText 的動作..
face='Lucida Console'>http://pywong.hk.st http://www.lazybones.ca
eightball
一般會員


發表:1
回覆:5
積分:1
註冊:2004-11-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-25 10:22:49 IP:61.221.xxx.xxx 未訂閱
引言: 那還不是一樣意思? 換湯不換藥而已,DBGrid 就改成在 OnColExit 事件上寫就好了嘛~~幹嘛腦筋轉不過來? >< face="Verdana, Arial, Helvetica"> 感謝大大的回覆.. 不是不用DBEdit..只不過,我們家的USER 想的很多,要的功能也很多, 要叫他一個個的去選,去改,他就會覺得 不符合需求時,就變成,造成他工作的 Delay ... 所以嚕..只好想辦法嚕~
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-25 11:06:12 IP:211.75.xxx.xxx 未訂閱
很奇怪ㄝ 為什麼你要說不想一直去觸發OnGetText事件??? 你有需要 秀出來的值要跟原來的不一樣 才會去做的ㄚ class="code"> procedure TDMhehg.CD2exe_manGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text := GetEmpNam(Sender.AsInteger); end; 那不管是瀏覽模式或是新增修改模式都會觸發並且執行 如果這樣寫
procedure TDMhehg.CD2exe_manGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
  if ado1.state in [dsbrowse] then
    Text := GetEmpNam(Sender.AsInteger);
end;
那麼在新增修改模式會觸發但是不會執行 而在瀏覽模式會觸發並且執行 所以一但資料有變動的時候不管在什麼模式下 都一定會觸發OnGetText事件 要不要執行 就看你程式碼怎麼控制 如果你堅持 而且project是剛開始做 可以在SQL裡面就把它case end 掉 如果不是 就不要從SQL改了 天行健 君子當自強不息~~@.@ 發表人 - T.J.B 於 2004/11/25 11:16:45
------
天行健
君子當自強不息~~@.@
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-25 12:37:37 IP:220.130.xxx.xxx 未訂閱
引言: 感謝大大的回覆.. 不是不用DBEdit..只不過,我們家的USER 想的很多,要的功能也很多, 要叫他一個個的去選,去改,他就會覺得 不符合需求時,就變成,造成他工作的 Delay ... 所以嚕..只好想辦法嚕~
全世界的User都是一模一樣的狀況,又不是你們家這樣而已? 我都已經進化到讓他們可以複製上一筆的紀錄,然後再修改需修改的欄位, 甚至當新增一筆資料時,一堆資料預設值都幫他們打好了, 選擇絕對還是最快的,當你的選擇東西太多時,當然你要去做處理, 讓他的選項縮小,不然50多筆資料要去選反而會變慢了,他們當然會抱怨, DBGrid 還是少拿當成輸入資料為妙,例如貨品數量是100,User改了一下, 然後他又想查一下別的東西,去點別的東西,那個東西就儲存了, 然後嚴重事情就發生了..資料不正確,以後你就頭疼了...
eightball
一般會員


發表:1
回覆:5
積分:1
註冊:2004-11-01

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-28 21:31:58 IP:61.64.xxx.xxx 未訂閱
引言: 很奇怪ㄝ 為什麼你要說不想一直去觸發OnGetText事件??? 你有需要 秀出來的值要跟原來的不一樣 才會去做的ㄚ class="code"> procedure TDMhehg.CD2exe_manGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin Text := GetEmpNam(Sender.AsInteger); end; 那不管是瀏覽模式或是新增修改模式都會觸發並且執行 如果這樣寫
procedure TDMhehg.CD2exe_manGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
  if ado1.state in [dsbrowse] then
    Text := GetEmpNam(Sender.AsInteger);
end;
那麼在新增修改模式會觸發但是不會執行 而在瀏覽模式會觸發並且執行 所以一但資料有變動的時候不管在什麼模式下 都一定會觸發OnGetText事件 要不要執行 就看你程式碼怎麼控制 如果你堅持 而且project是剛開始做 可以在SQL裡面就把它case end 掉 如果不是 就不要從SQL改了 天行健 君子當自強不息~~@.@ 發表人 - T.J.B 於 2004/11/25 11:16:45
嗯嗯..感謝大大的指教,再來試試看~
eightball
一般會員


發表:1
回覆:5
積分:1
註冊:2004-11-01

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-28 21:37:45 IP:61.64.xxx.xxx 未訂閱
引言:
引言: 感謝大大的回覆.. 不是不用DBEdit..只不過,我們家的USER 想的很多,要的功能也很多, 要叫他一個個的去選,去改,他就會覺得 不符合需求時,就變成,造成他工作的 Delay ... 所以嚕..只好想辦法嚕~
全世界的User都是一模一樣的狀況,又不是你們家這樣而已? 我都已經進化到讓他們可以複製上一筆的紀錄,然後再修改需修改的欄位, 甚至當新增一筆資料時,一堆資料預設值都幫他們打好了, 選擇絕對還是最快的,當你的選擇東西太多時,當然你要去做處理, 讓他的選項縮小,不然50多筆資料要去選反而會變慢了,他們當然會抱怨, DBGrid 還是少拿當成輸入資料為妙,例如貨品數量是100,User改了一下, 然後他又想查一下別的東西,去點別的東西,那個東西就儲存了, 然後嚴重事情就發生了..資料不正確,以後你就頭疼了...
嗯嗯..了解,,感謝指教~ 再來試試看~
系統時間:2024-04-27 12:10:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!