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

請問在MS SQL Server 關閉後 再次 Run 時 ,如何讓我的程式知道網路已恢復?

尚未結案
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-20 18:55:27 IP:61.185.xxx.xxx 未訂閱
各位先進好! 我使用的是MS SQL Server2000; Delphi5:ADOconnection,ADOquery 我的設計思路是: 當我的程式遇到MS SQL Server關閉的情況下,先隱藏。 希望如果在MS SQL Server 再次 Run 後,我的程式再出現。 但是,一旦MS SQL Server關閉,超過ADOconnection connection timeOut,我的程式將一直隱藏,即使MS SQL Server 再次 Run 後也是如此。 Q:請問在MS SQL Server關閉後再次Run 時 ,如何 讓我的程式知道網路已恢復?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-20 19:44:44 IP:218.16.xxx.xxx 未訂閱
要做到自動通知你的程式應不易,最簡單的應是做個 timer 在 onTimer 時 去嘗試連接
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-21 10:17:39 IP:61.155.xxx.xxx 未訂閱
1.MS SQL Server数据库服务器软件,每次自动运行的时候都会进行广播方式,通知其它相关数据库服务器代理它已经上线,你可以来获取这样的信息。    2.使用时间触发器(TIMER)来,不断检测是否连接成功来判断SQL SERVER服务器是否启动。    风花雪月 e梦情缘
------
风花雪月 e梦情缘
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-21 10:45:20 IP:211.23.xxx.xxx 未訂閱
引言: 1.MS SQL Server数据库服务器软件,每次自动运行的时候都会进行广播方式,通知其它相关数据库服务器代理它已经上线,你可以来获取这样的信息。
請問一下~~MS SQL SERVER 上線時會發出什麼訊息啊~~ -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-21 10:57:17 IP:61.155.xxx.xxx 未訂閱
Jasonwong 兄:    关于这个信息的资料,你要查查SQL SERVER的技术手册,我记不得是怎样实现的;但我以前是看过这样的方法的。我想网上应该有这样的资料把!!!    风花雪月 e梦情缘
------
风花雪月 e梦情缘
Mickey
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-21 11:11:24 IP:218.163.xxx.xxx 未訂閱
你可以叫 MS SQL Server 那台機器, 服務啟動後, 叫喇叭 "嗶" 一下,    但是必須叫齊所有人過來聽喔.    僅供參考.    對不起
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-21 11:21:26 IP:61.218.xxx.xxx 未訂閱
引言:要做到自動通知你的程式應不易,最簡單的應是做個 timer 在 onTimer 時 去嘗試連接
justmade 版主所講的是可行的 MSSQL Server 預設的TCP Port 是 1433, 你只需要在 OnTimer 去測試即可 小弟以Indy 之IdTelnet 元件實作,簡易的方法如下,即可判別server 目前是否已啟動
    try
        IdTelnet1.Host := 'server';
        IdTelnet1.Port := 1433;
        IdTelnet1.Connect();
        ShowMessage('連線成功');
    except
        ShowMessage('連線失敗');
    end;    
我的不是最好的方法,但應可行
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-21 11:27:35 IP:211.76.xxx.xxx 未訂閱
Hi, 可以用 timer 來進行 check 比較理想, check 的方式可以參考這篇: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29149 只是要將 port 改為 1433 (default) 或是其他自訂的 port.
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-21 13:06:51 IP:219.145.xxx.xxx 未訂閱
首先感謝各位先進的熱心回應! 通過ddy兄和timhuang兄的解答,我現在知道如何判斷SQL Server是否在 RUN,但還不明白在SQL Server 再次 Run 後,如何讓ADOConnection 或 ADOQuery 也知道?否則,它始終執行下列 Code 的 Except部分。 Try ... Form1.show; ... Except ... Form1.hide; ... End; 有這麼多回應,真沒想到!再次感謝各位解答
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-21 14:46:16 IP:211.76.xxx.xxx 未訂閱
請將 adoconnection 先 close 後再重新 open 就可以了!! 另外你的 error handle 應該改為這樣比較理想....    
try
  ...
  ...
  ADOConnection1.Close;
  ADOConnection1.Open;
  Form1.Show;
  ....
except
  on E: Exception do
    MessageDlg(E.Message, mtError, [mbOK], 0);
end;
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-22 18:18:24 IP:61.185.xxx.xxx 未訂閱
感謝 Timehuang 兄的指點! 我現在是這樣寫的: procedure TForm1.Timer1Timer(Sender: TObject); var Blisten:boolean; begin powersock1.host='192.168.1.10'; powersock1.port:=1433; try powersock1.connect; powersock1.connected:=true; Blisten:=true; except powersock1.connected:=false; Blisten:=false; end; powersock1.disconnect; if Blisten then begin Form1.show; Adoquery1‧close;//語句1 Adoquery1‧open; //語句2 ‧‧‧‧ Adoquery1‧close; Adoquery1‧sql‧add( select ‧‧‧); Adoquery1‧OPEN; ‧‧‧‧ end; end; 但實際上,即使語句1,2執行後,Adoquery1也一直是與網路斷開的,沒有重新連接資料庫。因此ADOquery沒有得到結果。 但是,書上說 Adoquery1‧close;後,再Adoquery1‧open; 可以重新連接資料庫。 請問這是為什麼呀?
chih
版主


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-22 20:56:21 IP:61.216.xxx.xxx 未訂閱
改為這樣試看看
procedure TForm1.Timer1Timer(Sender: TObject);
var
Blisten:boolean;
begin
powersock1.host='192.168.1.10';
powersock1.port:=1433;
try
powersock1.connect;
powersock1.connected:=true;
Blisten:=true;
except
powersock1.connected:=false;
Blisten:=false;
SHOWMESSAGE('資料庫未啟動!!!');
exit;
end;
SHOWMESSAGE('資料庫已啟動!!!');
//powersock1.disconnect;
if Blisten then
begin
Form1.show; 
Adoquery1‧close;//語句1 
Adoquery1‧open; //語句2 
‧‧‧‧ 
Adoquery1‧close; 
Adoquery1‧sql‧add( select ‧‧‧); 
Adoquery1‧OPEN; 
‧‧‧‧ 
end; 
end; 
TRY TRY SEE
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-22 23:42:27 IP:61.221.xxx.xxx 未訂閱
請問你是用 adoquery 直接連 db 嗎. 沒有經過 adoconnection ??    
 procedure TForm1.Timer1Timer(Sender: TObject);
 var
   Blisten:boolean;
 begin
   powersock1.host='192.168.1.10';
   powersock1.port:=1433;
   try     
     powersock1.connect;
     powersock1.connected:=true;
     Blisten:=true;
   except
     powersock1.connected:=false;
     Blisten:=false;
   end;
     powersock1.disconnect;
     if Blisten then
     begin
       Timer1.Enabled := false; //以防止 timer 繼續觸發 onTimer 事件
       Form1.show; 
       Adoquery1‧close;//語句1 
       Adoquery1‧open; //語句2 
       ‧‧‧‧ 
       try
         Adoquery1‧close; 
         Adoquery1‧sql‧add( select ‧‧‧); 
         Adoquery1‧OPEN;  //那你連不上這裡不會發生問題嗎
         ‧‧‧‧ 
       >     
        
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-06-05 18:13:23 IP:61.185.xxx.xxx 未訂閱
Hi!TimHuang兄,我確實是用 adoquery 直接 db ,沒有經過 adoconnection 。我想你這樣問我: 一是我前面有些情況沒介紹清楚,剛開始我是使用了ADOconnection與ADOquery,但後來覺得我的程式只是在MS SQL SERVER 運行時,每做完一次處理按鍵盤'Enter' 一次,向資料庫增加一條Record,在MS SQL SERVER關閉時程式隱藏,因此就沒再用ADOconnection,直接用ADOquery。 二是你是否是看了李維先生的《delphi5‧x ADO/MTS/COM 專業程式設計》一書的原因,在這本書的第二章第一節講 '1‧TADOconnection元件部分'的第一段的最後一句話:"TADOConnection元件提供了和數據源建立連接的功能,因此它是應用程式一定會使用的元件"。注意:李維先生說是"一定會使用"‧ 但是在《Delphi 5 Developer's Guide》一書的第28‧8‧2 "ADOExpress 元件"中提到:這個元件(TADOConnection)與基於BDE的程式中的TDataBase元件類似,對於簡單的程式並沒有必要使用它。 通過我的測試:後者應該是正確的。 這是我的淺見啦,或許有前輩們有別的見解. 另外,我一直有一個簡單而重要的問題不太明白,按照我的理解,在MS SQL SERVER關閉後再次運行後,通過: ‧‧‧‧ Adoquery1‧close; Adoquery1‧sql‧add( select ‧‧‧); Adoquery1‧open; ‧‧‧‧ 我的程式應該能夠再次與MS SQL SERVER連接,但實際與此相反。不知,這是否與我 set ADOQUERY1的 Properties有關,因為我程式的其它部分就與資料庫操作無關了呀‧
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-06-06 10:27:06 IP:203.95.xxx.xxx 未訂閱
引言: 另外,我一直有一個簡單而重要的問題不太明白,按照我的理解,在MS SQL SERVER關閉後再次運行後,通過: ‧‧‧‧ Adoquery1‧close; Adoquery1‧sql‧add( select ‧‧‧); Adoquery1‧open; ‧‧‧‧ 我的程式應該能夠再次與MS SQL SERVER連接,但實際與此相反。不知,這是否與我 set ADOQUERY1的 Properties有關,因為我程式的其它部分就與資料庫操作無關了呀‧
不好意思, 您還是沒有說明發生問題的錯誤訊息是什麼. 因為這是一個很重要的除錯參考. 另外關於 ADOConnection 的部分, 弟覺得對 db 的設定及管理有很大的幫助, 不過就您的程式中僅有一個 adoquery 的話, 應該就沒有太大的影響...
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-06-06 11:59:21 IP:219.145.xxx.xxx 未訂閱
謝TimeHuang 兄的再三指引! MS SQL SERVER後再次行後,我的程式依然會報出"連接失敗!"的錯誤訊息。 另外,TimeHuang 兄在談到ADOConnection時,欲言又止,好像有所顧慮,如方便請指點愚弟,謝謝!
系統時間:2024-06-16 17:33:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!