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

APPEND後竟然會先去執行DBEdit1EXIT內的程式碼

尚未結案
sangya
一般會員


發表:21
回覆:46
積分:13
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-07 14:44:02 IP:218.32.xxx.xxx 未訂閱
請教各位: 在DBEdit1EXIT中寫下一段程式碼,然後執行APPEND的指令, 結果竟然會先去執行DBEdit1EXIT中的程式碼.然後再APPEND, 之後DBEdit1EXIT內的程式碼就失效了,這是為什麼呢?有什麼 辦法可解決..麻煩各位
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-07 17:06:40 IP:210.66.xxx.xxx 未訂閱
妳的意思是要Append完,游標移到DBEdit1時才驅動OnExit中之程式碼嗎?如果妳在OnExit中的程式碼沒有判斷何時該執行的話,只要妳游標一離開DBEdit1就會執行該程式碼,如果是要新增或是修改狀態時才去驅動程式碼的話,我會先去判斷DBEdit1所連結之DataSet之State,如果是dsEdit or dsInsert才驅動,類似這樣的做法,不知這個回答是不是妳要的,參考看看! Ian
sangya
一般會員


發表:21
回覆:46
積分:13
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-10 09:22:50 IP:211.20.xxx.xxx 未訂閱
l630521:這個方法我己測過,問題是設定在state=dsinsert時去驅動,只要一旦執行append指令,就會馬上去驅動onExit內的程式,那時遊標都還沒進入dbEdit1內,就會馬上執行了...是否還有其它的辦法?
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-10 10:00:24 IP:210.66.xxx.xxx 未訂閱
Sangya!我剛才試了一下: 1.如果用TDBNavigator的話,新增時就算游標在DBEdit1,也不會驅動OnExit事件。 2.如果用另一個Button去執行Append,   
  if ADOTable1.State in [dsInsert, dsEdit] then
    ShowMessage('OnExit');
  
也不會出現妳說的狀況! 而且OnExit必需在游標在DBEdit1然後離開時才會驅動,除非妳有在其他地方執行DBEdit1Exit, 不知道妳的Append是下在那裡執行呢? Ian
Wesly
中階會員


發表:14
回覆:103
積分:53
註冊:2002-05-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-10 10:35:22 IP:218.170.xxx.xxx 未訂閱
妳是否有一個按鈕去執行Append的動作, 若是請檢查妳所使用的按鈕是否為TBitBtn 或 TButton 或是由 TWinControl 繼承下來的 Button, 若是, 請改為TSpeedButton。 理由是 TBitBtn 及 TButton 都是由 TWinControl 繼承下來的, 是故當妳去按此一按鍵時會先去執行OnExit的事件, 無法達到妳所想要的順序。 希望能對你有所幫助.
sangya
一般會員


發表:21
回覆:46
積分:13
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-10 17:44:07 IP:211.76.xxx.xxx 未訂閱
l630521 and Wesly: 我可以確定我使用的為TSpeedButton,DB是使用dbExpress,可以試驗看看 在TSpeedButton內key入TClientDataSet1.append 在dbedit1onexit內鍵入showmessage('onexit');即可發現我所碰到的問題 謝謝
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-10 18:22:59 IP:210.66.xxx.xxx 未訂閱
Sangya 我用了妳的方式去,依然試不出妳所說的情形!在按SpeedButton時確實不會去驅動DBEdit1Exit事件,或是妳要把妳的程式Post出來看看,這樣也許會比較快! Ian
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-10 20:35:40 IP:218.32.xxx.xxx 未訂閱
sangya 你好: 檢查看看 DataSource.OnStateChange / OnUpdateData Event 是否接到了, DBEdit1Exit Procedure.
sangya
一般會員


發表:21
回覆:46
積分:13
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-05-11 09:14:38 IP:211.76.xxx.xxx 未訂閱
程式代碼如下: procedure TForm1.ADDClick(Sender: TObject); begin//新增 SQLQ.Close; CDS.Close; SQLQ.SQL.Clear; SQLQ.SQL.Add('SELECT * FROM A'); SQLQ.SQL.Add('WHERE A2 IS NULL'); SQLQ.Open; CDS.Open; CDS.Append; END; procedure TFormPM_4.A1Exit(Sender: TObject); VAR A1_L:STRING begin //編號是否有重複 A1_L:=A1.TEXT; SQLQ1.Close; CDS1.Close; SQLQ1.SQL.Clear; SQLQ1.SQL.Add('SELECT A1 FROM A'); SQLQ1.SQL.Add('WHERE A1=' #39 A1_L #39); SQLQ1.Open; CDS1.Open; IF (CDS1.IsEmpty) AND (TRIM(A1.Text)<>'') THEN EXIT; SHOWMESSAGE('設備詳細規格編號重覆或空白,請重新輸入'); A1.Clear; end; 請問Mickey,你的方法要如何撰寫程式做測試?
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-05-11 09:48:22 IP:218.163.xxx.xxx 未訂閱
引言: 請問Mickey,你的方法要如何撰寫程式做測試?
只是建議你從 Delphi Object Inspector 中, Event Page...看看是否不小心, 在 DataSet / DataSource 元件的 Event 中, 掛上 DBEdit1Exit Procedure, 或某個程序, 主動去呼叫 DBEdit1Exit, 不然不該有這種情況才是.
sangya
一般會員


發表:21
回覆:46
積分:13
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-05-11 11:14:44 IP:211.76.xxx.xxx 未訂閱
Mickey: 原來如此... 搜尋後,雖然沒有此種問題,可是APPEND後還是會馬上執行ONEXIT EVENT...
sangya
一般會員


發表:21
回覆:46
積分:13
註冊:2002-04-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-05-12 13:44:14 IP:218.32.xxx.xxx 未訂閱
謝謝各位的幫忙,問題己解決....
系統時間:2024-05-16 16:34:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!