ADO connect 偵測 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位! 我用 ADOconnect 來連結遠端資料庫(www.xxx.com.tw方式), 我先設置一個按鍵, click之後會偵測 connect 是否成功, 然後就可以存取資料, 可是如果是以撥接方式, 或是中華電信的無限上限(撥接)方式的寬頻仍會在一定的時間內會有自動中斷的功能, 我想做一個在背景作業上可以自動偵測 ADOconnect 是否持續連線的功能(必須在不影響前景作業之下), 請問要如何做呢? 是不是用 Thread方式可以做到, 有沒有可以供參考的資料, 謝謝!
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 請問各位! 我用 ADOconnect 來連結遠端資料庫(www.xxx.com.tw方式), 我先設置一個按鍵, click之後會偵測 connect 是否成功, 然後就可以存取資料, 可是如果是以撥接方式, 或是中華電信的無限上限(撥接)方式的寬頻仍會在一定的時間內會有自動中斷的功能, 我想做一個在背景作業上可以自動偵測 ADOconnect 是否持續連線的功能(必須在不影響前景作業之下), 請問要如何做呢? 是不是用 Thread方式可以做到, 有沒有可以供參考的資料, 謝謝!用 procedure TForm1.ADOConnection1AfterDisconnect(Sender: TObject); begin // 檢查程式 end; 不是可以知到斷線? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
用
procedure TForm1.ADOConnection1AfterDisconnect(Sender: TObject);
begin
// 檢查程式
end;
不是可以知到斷線? ~~~Delphi K.Top討論區站長~~~
[/quote] 站長大人: 謝謝指點, 我會試試看, 不過可否請問一下,
因為我初用ADO寫法, 很多東西並不清楚, 這個PROCEDURE 不知是否在啟動ADOconnect 之後會自動隨時偵測, 若有斷線則自動觸發afterdisconnect ?
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 用 procedure TForm1.ADOConnection1AfterDisconnect(Sender: TObject); begin // 檢查程式 end; 不是可以知到斷線? ~~~Delphi K.Top討論區站長~~~站長大人, 我今天測了一下 disconnect event 的事件, 但結果不是我想像的結果, 雖然 disconnect 會在 adoconnect 斷線上觸發, 但必須是我們要下 adoconnect:= False 後才會觸發, 我現在需要的功能是一旦已經connct上後, 系統要能自動偵測 connect 狀況(隨時), 如果已經斷線了就去做斷線的事情, 所以我必須要有一個偵測的行為, 但我不能使用 timer 功能, 因為如果寫在timer 固定30秒去偵測, 會造成萬一使用者正在進行我提供的process 程式, 那 timer 會攔截我的動作, 先進行 connect 測試, 這樣程式即會出問題(我的流程規定必須在指定的秒數內完成才算合格), 所以是不是能在背景作業上執行偵測, 這樣也不會影響我前景作業的時效! 那要如何做呢? 發表人 - P.D. 於 2002/07/18 16:10:15 |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言:你為何一定要去檢查CONNECTION的狀況....... @@~~飛翔在天際的精靈~~@@引言: 用 procedure TForm1.ADOConnection1AfterDisconnect(Sender: TObject); begin // 檢查程式 end; 不是可以知到斷線? ~~~Delphi K.Top討論區站長~~~站長大人, 我今天測了一下 disconnect event 的事件, 但結果不是我想像的結果, 雖然 disconnect 會在 adoconnect 斷線上觸發, 但必須是我們要下 adoconnect:= False 後才會觸發, 我現在需要的功能是一旦已經connct上後, 系統要能自動偵測 connect 狀況(隨時), 如果已經斷線了就去做斷線的事情, 所以我必須要有一個偵測的行為, 但我不能使用 timer 功能, 因為如果寫在timer 固定30秒去偵測, 會造成萬一使用者正在進行我提供的process 程式, 那 timer 會攔截我的動作, 先進行 connect 測試, 這樣程式即會出問題(我的流程規定必須在指定的秒數內完成才算合格), 所以是不是能在背景作業上執行偵測, 這樣也不會影響我前景作業的時效! 那要如何做呢? 發表人 - P.D. 於 2002/07/18 16:10:15
------
@@~~飛翔在天際的精靈~~@@ |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 你為何一定要去檢查CONNECTION的狀況....... @@~~飛翔在天際的精靈~~@@在這個專案中, 客戶對執行時的時間是有要求的, 當我下達一個資料的搜尋, 系統會先找電腦的資料庫, 如果沒有則透過ADO來查遠端的記錄是否有, 而在這之前, 客戶會先執行一次 connect 動作, 然後由系統告知目前是否與遠端連線, 因為如果 ADOconnect 無法連線時會花近20秒才會回應 fail(如果能連上不用2秒), 我不能為客戶承擔這個風險, 因為他們要求這樣的搜尋時間不得高於4秒, 如果是能連線則沒有問題, 所以我才會設計一個請客戶事先先執行連線的行為, 然後在我的程式中會告知目前是否連線中(以一個label顯示), 但連上線後如果這當中有斷線(離線), 程式並無法得知, 所以我才要檢查connect 情況, 如果是斷線的, 請客戶再點一下連線鈕(因為客戶的客戶分佈全省, 有的用adsl, 有的用撥接, 撥接在一定的時限內又會自動離線), 不知這樣的說明是否了解, 以及是否有解決之法? |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
longbest
一般會員 發表:9 回覆:16 積分:5 註冊:2002-04-18 發送簡訊給我 |
引言: 版主: 我查了一下 ADOconnection.ConnectionTimeOut 只是在設定連結的TimeOut 時間, 並不是我想要的東西, 因為我要的功能是在已經連線之後, 我們沒有主動斷線的情況下被外力因素導致連結中斷時, 我必須要能立即偵測到並告知user已經斷線, 所以在被外力斷線下必須能觸發某一個事件, 這樣說明, 不知各位是否了解!說一個沒什麼技術的方法,另外增加一個 ADOConnection 與 Timer 定時的建立連結,比如說每 15 秒, 有連結成功就中斷連結並重新開始計時, 連結失敗就當作斷線了, 可以通知使用者... |
ray24
中階會員 發表:18 回覆:88 積分:56 註冊:2002-07-24 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 說一個沒什麼技術的方法,另外增加一個 ADOConnection 與 Timer 定時的建立連結,比如說每 15 秒, 有連結成功就中斷連結並重新開始計時, 連結失敗就當作斷線了, 可以通知使用者...我目前想到的作法就是如此, 就一般的程式設計而言, 這個方法的確是可行, 但在我這支程式, 我想在第一次的發言, 我即已提到, 我無法使用timer來做, 因為假設我設定30秒偵測一次, 每30秒系統會由我的程式將控制權轉到onitmer的事件上進行偵測, 如果沒有斷線, 所花的時間不到1秒, 客戶是察覺不出, 但如果一旦是離線模式, ADO會耗費5-10倍的時間才會回應DISCONNECT(即使TIMEOUT設為1000也是一樣), 但我的客戶這時很可能正在處理某些程序, 而這些程序的執行是有時間上限制, 如果這樣會造成客戶會因為這個原因而導致控制權的問題而使整個程序執行失敗, 所以我不能在ONTIMR上進行偵測, 除非可以設計一個在背景偵測不影響作業的模式, 似乎thread 可以做到, 但我對這部份是完全不懂, 不知有誰可以指導一下, 如果有sample可以參考那更好, 謝謝! |
aJye
一般會員 發表:2 回覆:5 積分:1 註冊:2002-07-21 發送簡訊給我 |
引言:你好: 我是有類似問題的人,但我用的是Tsocketconnection 只是我問在「多層架構應用程式開發討論區」這個討論區裡 ^^" 同樣有高手建議可以使用thread去連看看 但能否有高手告知如果用thread呢?引言: 說一個沒什麼技術的方法,另外增加一個 ADOConnection 與 Timer 定時的建立連結,比如說每 15 秒, 有連結成功就中斷連結並重新開始計時, 連結失敗就當作斷線了, 可以通知使用者...我目前想到的作法就是如此, 就一般的程式設計而言, 這個方法的確是可行, 但在我這支程式, 我想在第一次的發言, 我即已提到, 我無法使用timer來做, 因為假設我設定30秒偵測一次, 每30秒系統會由我的程式將控制權轉到onitmer的事件上進行偵測, 如果沒有斷線, 所花的時間不到1秒, 客戶是察覺不出, 但如果一旦是離線模式, ADO會耗費5-10倍的時間才會回應DISCONNECT(即使TIMEOUT設為1000也是一樣), 但我的客戶這時很可能正在處理某些程序, 而這些程序的執行是有時間上限制, 如果這樣會造成客戶會因為這個原因而導致控制權的問題而使整個程序執行失敗, 所以我不能在ONTIMR上進行偵測, 除非可以設計一個在背景偵測不影響作業的模式, 似乎thread 可以做到, 但我對這部份是完全不懂, 不知有誰可以指導一下, 如果有sample可以參考那更好, 謝謝! |
longbest
一般會員 發表:9 回覆:16 積分:5 註冊:2002-04-18 發送簡訊給我 |
引言: 我目前想到的作法就是如此, 就一般的程式設計而言, 這個方法的確是可行, 但在我這支程式, 我想在第一次的發言, 我即已提到, 我無法使用timer來做, 因為假設我設定30秒偵測一次, 每30秒系統會由我的程式將控制權轉到onitmer的事件上進行偵測, 如果沒有斷線, 所花的時間不到1秒, 客戶是察覺不出, 但如果一旦是離線模式, ADO會耗費5-10倍的時間才會回應DISCONNECT(即使TIMEOUT設為1000也是一樣), 但我的客戶這時很可能正在處理某些程序, 而這些程序的執行是有時間上限制, 如果這樣會造成客戶會因為這個原因而導致控制權的問題而使整個程序執行失敗, 所以我不能在ONTIMR上進行偵測, 除非可以設計一個在背景偵測不影響作業的模式, 似乎thread 可以做到, 但我對這部份是完全不懂, 不知有誰可以指導一下, 如果有sample可以參考那更好, 謝謝!Thread 只是把你的偵測功能由另一個程序去幫你處理, 但是看了你所說的我覺得要先釐清你所說不可以影響客戶操作的程序,而這個程序的執行的必要條件是不是包含了網路是必須在連結的狀態. 另外,新的程序建立連結失敗並不代表在舊程序已建立好的連結是不可用的. |
bjzhq
一般會員 發表:2 回覆:2 積分:5 註冊:2002-07-11 發送簡訊給我 |
引言:try use 'ping' program and search 'Request timed out.' in answer text. Why Screen is disorderly when I replay?引言: 我目前想到的作法就是如此, 就一般的程式設計而言, 這個方法的確是可行, 但在我這支程式, 我想在第一次的發言, 我即已提到, 我無法使用timer來做, 因為假設我設定30秒偵測一次, 每30秒系統會由我的程式將控制權轉到onitmer的事件上進行偵測, 如果沒有斷線, 所花的時間不到1秒, 客戶是察覺不出, 但如果一旦是離線模式, ADO會耗費5-10倍的時間才會回應DISCONNECT(即使TIMEOUT設為1000也是一樣), 但我的客戶這時很可能正在處理某些程序, 而這些程序的執行是有時間上限制, 如果這樣會造成客戶會因為這個原因而導致控制權的問題而使整個程序執行失敗, 所以我不能在ONTIMR上進行偵測, 除非可以設計一個在背景偵測不影響作業的模式, 似乎thread 可以做到, 但我對這部份是完全不懂, 不知有誰可以指導一下, 如果有sample可以參考那更好, 謝謝!Thread 只是把你的偵測功能由另一個程序去幫你處理, 但是看了你所說的我覺得要先釐清你所說不可以影響客戶操作的程序,而這個程序的執行的必要條件是不是包含了網路是必須在連結的狀態. 另外,新的程序建立連結失敗並不代表在舊程序已建立好的連結是不可用的. |
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: Thread 只是把你的偵測功能由另一個程序去幫你處理, 但是看了你所說的我覺得要先釐清你所說不可以影響客戶操作的程序,而這個程序的執行的必要條件是不是包含了網路是必須在連結的狀態. 另外,新的程序建立連結失敗並不代表在舊程序已建立好的連結是不可用的.我的程式在user開始執行時, 可能會從網路上下載一些server data 來執行我的程序(註), 所以在啟動程序一開始我便設定 connect 動作(由user click connect button), 如果user要做數次程序時, 無須每次都要做connect 行為, 可以節省時間, 但就會衍生出萬一斷線時, user 在執行程序會取不到 server data 資料而做出錯誤的結果, 而因為在 connect 之初我設定一個label 告知user是否在連線上, 如果不是則請user先 click button , 連上後我無法變更label.caption的內容(因為不知道是否仍有連線), 所以我才想要知道是否有功能 可以做到上面我說的狀況! (註)user 可以選擇 data 由 client 端叫出或由 server 下載, 如果由 client 端叫出, 萬一沒有符合的 data 則會由 user 自已新建 發表人 - P.D. 於 2002/07/28 00:21:12 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
dirboy
一般會員 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 其實你不一定要把應用程式和檢測程式都寫在一個Application 中啊, 你可以另外寫一個獨立的程式, 比如像windows 中的 dial-up, 你的應用程式就像 IE, IE 是不知道有沒有斷線的, 只有Dial-up 知道. 但你可以把Dial-up 程式寫成會通知 IE 不就行了. 其實可以用 Threat 來寫, 或單獨一個程式也可.這個方法倒是可行, 不過兩支AP同時在RUN時, 要透過何種方式才有辦法可以將B程式(Dialup)的結果讓 A程式(應用程式)隨時知道, 小弟我功力尚未觸及這裡, 可能很難達成, 另外Thread也是我未曾接觸的層面, 我不知道要從何下手, 所以短時間內似乎無法可以使用完成, 謝謝! |
ray24
中階會員 發表:18 回覆:88 積分:56 註冊:2002-07-24 發送簡訊給我 |
|
tonychow
一般會員 發表:5 回覆:25 積分:11 註冊:2002-05-28 發送簡訊給我 |
引言: 請問各位! 我用 ADOconnect 來連結遠端資料庫(www.xxx.com.tw方式), 我先設置一個按鍵, click之後會偵測 connect 是否成功, 然後就可以存取資料, 可是如果是以撥接方式, 或是中華電信的無限上限(撥接)方式的寬頻仍會在一定的時間內會有自動中斷的功能, 我想做一個在背景作業上可以自動偵測 ADOconnect 是否持續連線的功能(必須在不影響前景作業之下), 請問要如何做呢? 是不是用 Thread方式可以做到, 有沒有可以供參考的資料, 謝謝!真的要強烈建議您用3-tier來做 否則,你可能會被玩死 程式還可以短一點 一陣紅光閃過 夾雜著V-Twin獨特的厚實聲浪 也聞到了高辛烷汽油燃燒後的焦油味 雙碟煞就像是戰神的雙翼-只祝福最剽悍的戰士 天生具有灼傷地表的能力 來吧!看到尾燈就算妳贏.......
------
一陣紅光閃過 夾雜著V-Twin獨特的厚實聲浪 也聞到了高辛烷汽油燃燒後的焦油味 雙碟煞就像是戰神的雙翼-只祝福最剽悍的戰士 天生具有灼傷地表的能力 來吧!看到尾燈就算妳贏....... |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
引言:版主你好~ 我的表達能力不是很好~見笑了 最近開始碰delphi,在看以前文章時,cs的槍聲打斷了學習的情緒 又剛好看到這一題~當時想 cs和msn能馬上知道連線狀況 和這文章有點關係 當使用者登入~常註程式就啟動了(client)並和server保持連絡 此時client的機器只能有一個login--因此每點只有一個用socket的連線 用socket傳送server端的資料庫狀況 當登入連線的狀態時,使用者又可以從常註的程式中開啟其它的程式 當離線(斷線時)馬上出現訊息 發表人 - s8556026 於 2003/08/19 23:39:26引言: 那可否在資料庫主機寫一程式不斷傳送訊息, 那user端判斷隔多久沒收到訊息就顯示網路異常呢??這個方法我曾想過, 可是我的客戶全省有800多個點(每一個點可能有1-數10個線), 每一個線都會連上主機, 如果要判斷每一個線的連線情況(有可能是user斷線, 而不是server端斷線), 這似乎困難度很高! 而且有些是ADSL, 有些是撥接, 有些是CABEL... 發表人 - P.D. 於 2002/07/28 00:10:21 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言:哦! 整整一年了, 竟然還被s8556026挑出來回覆, 感動~~~, 不過不是很清楚 一台機器只能有一個連線, 指的機器是client或server, 看來好像是server, 我對socket並未涉獵, 可否有sample參考, 謝謝!引言:那麼可以像msn或cs的steam一樣,一台機器只能有一個連線(socket),再從這個service裡點出其它的服務引言: 那可否在資料庫主機寫一程式不斷傳送訊息, 那user端判斷隔多久沒收到訊息就顯示網路異常呢??這個方法我曾想過, 可是我的客戶全省有800多個點(每一個點可能有1-數10個線), 每一個線都會連上主機, 如果要判斷每一個線的連線情況(有可能是user斷線, 而不是server端斷線), 這似乎困難度很高! 而且有些是ADSL, 有些是撥接, 有些是CABEL... 發表人 - P.D. 於 2002/07/28 00:10:21 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |