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

ADO 與 SQL 連線失敗

答題得分者是:aftcast
2007
中階會員


發表:54
回覆:90
積分:98
註冊:2008-08-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-14 15:23:19 IP:220.132.xxx.xxx 未訂閱
各位大大好:

我用 ADO 連 MS-SQL(本機、SQL 2000),( SQL<----TADOConnection<----TADOQuery )
我在 ADOQuery 跟 SQL Server ,INSERT, DELETE, UPDATE, ALTER TABLE, and CREATE TABLE. Execute 之類的動作,
用了 try catch 來處理例外,

try
{
.
.
.
}
catch(Exception &exception)
{
if( adQry->Connection->Errors->Count>0 )
{
for(int i=0 ; i<=adQry->Connection->Errors->Count-1; i )
{
ShowMessage(adQry->Connection->Errors->Item[i]->Description);
}
}
}

結果發現,程式沒去關掉 sql 的連線,(程式在運作時,會新增、刪除、修改資料庫內的資料 )
本來運作正常(可以正常新增、刪除、修改)
卻有不定期,不規則的發生(當然不是常常發生), 連線失敗的錯誤訊息,(ms-sql 還在運作)
軟体重開就又可以連。
PS:軟体是不關掉的,要常期開著,因為有在收裝置上的資料,每天二十四小時運作。

所以想請問各位大大,是否有發生過??
什麼情況下會發生之類的事(是什麼原因造成之間的 Connection 斷線)??
是 ms-sql 本身服務的問題嗎??
對 ms-sql 的設定管理不熟,是否有設定值可以解決這問題??
更新 sercive pack 可以解決嗎??

謝謝!!!
編輯記錄
2007 重新編輯於 2008-10-14 16:06:11, 註解 無‧
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-14 16:48:24 IP:210.208.xxx.xxx 訂閱
先試試利用 try...__finally, try...catch 等方法,看可不可以避免這個問題,例如:

[code cpp]
TADOConnection *adoc=new TADOConnection(Application);
TADOQuery *adoq=new TADOQuery(Application);
try
{
adoc->ConnectionString="...略...";
try
{
adoc->Open();
if(adoc->Connected)
{
adoq->Connection=adoc;
AnsiString aCmd="...略...";
adoq->Close();
adoq->SQL->Clear();
adoq->SQL->Add(aCmd);
adoq->Open();
//...do something...
}
}
catch(Exception &ex)
{
//...do something...
}
}
__finally
{
if(adoq!=NULL)
{
adoq->Close();
delete adoq;
}
if(adoc!=NULL)
{
adoc->Close();
delete adoc;
}
}
[/code]
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-15 04:38:04 IP:122.120.xxx.xxx 訂閱
你好,我也寫過類似的程式,而且是用service ap 來完成。在電信公司24小時run。而你說的問題是可能發生的,尤其是瞬間server太忙也會無法連上。我是在catch 裡加了二行

Connection->Close();
Connection->Open();

接下來再 loop至try,架構上大至是

while ( .....)
{
......
......
try { ...... }
catch
{
......

Connection->Close();
Connection->Open();

}

Sleep(duration);
//--此處可加上log 程式來記錄錯誤的時間與情形
}

------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2017-12-18 14:52:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!