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

ADOconnection

答題得分者是:Dalman
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-09 11:11:46 IP:61.222.xxx.xxx 未訂閱
請問各位 ADOConnection:= True 之後, 會不會在 user 一段時間沒有任何的傳輸io行為後, ADO會自動斷線, 還是除非我下 Connection:= False才會斷! 因為我現在發生一家客戶, 透過ADO連上之後, 如果過了十來分都沒有去動程式(還沒有被啟動螢幕保護程式前), 如果之後再執行程式, 就無法連上遠端主機資料, 必須重新點選我設定的 CONNECT BUTTON 再連一次!
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-09 12:26:23 IP:211.21.xxx.xxx 未訂閱
跟 KeepConnection 有沒有關係?
Dalman
一般會員


發表:27
回覆:22
積分:24
註冊:2002-08-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-10 18:15:23 IP:211.74.xxx.xxx 未訂閱
‧當過 n 秒後未有與資料庫連結動時,ADO Connection 物件會被系統切斷與資料庫連結,這是微軟文件上有說明的! ‧建議你程式寫法如下: . . . if not TADOConnection.Connected then TADOConnection.Connected := true; . . 這樣子即使被切斷與資料庫連結,程式本身還是可以自動開啟連結!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-10-10 21:24:28 IP:210.85.xxx.xxx 未訂閱
引言: ‧當過 n 秒後未有與資料庫連結動時,ADO Connection 物件會被系統切斷與資料庫連結,這是微軟文件上有說明的! ‧建議你程式寫法如下: . . . if not TADOConnection.Connected then TADOConnection.Connected := true; . . 這樣子即使被切斷與資料庫連結,程式本身還是可以自動開啟連結!
謝謝! 那再請教一下, 這段要寫在那裡, 是做在ondisconnect event中嗎? 另外, 我只有這個客戶會這樣, 其他十來個並沒有發生相同的問題, 我是幫他們CLIENT 裝MDAC 2.7 (上MICROSOFT網抓下來的)
Dalman
一般會員


發表:27
回覆:22
積分:24
註冊:2002-08-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-12 00:03:20 IP:211.74.xxx.xxx 未訂閱
if not TADOConnection.Connected then TADOConnection.Connected := true; 上述程式碼應寫在下列地方(舉一反三,你看了就能會意了): 【範例一】 with TADOQuery do begin Connection := TADOConnection1; //(某個ADO Connection物件)。 if not Connection.Connected then Connection.Connected := true; ExecSQL(); // 或者 Active := true; 或者 Open(); end; 【範例二】 with TADODataSet do begin Connection := TADOConnection1; //(某個ADO Connection物件)。 if not Connection.Connected then Connection.Connected := true; Active := true; // 或者 Open(); end; 【結論】 當你要執行取回資料集(select SQL)或者是做異動處理(insert, update, delete)之前,就經由上述程式碼讓程式「主動地」連結資料庫,不需要擔心TADOConnection物件被會系統切斷連結。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-10-12 21:52:30 IP:210.85.xxx.xxx 未訂閱
引言: if not TADOConnection.Connected then TADOConnection.Connected := true; 上述程式碼應寫在下列地方(舉一反三,你看了就能會意了): 【範例一】 with TADOQuery do begin Connection := TADOConnection1; //(某個ADO Connection物件)。 if not Connection.Connected then Connection.Connected := true; ExecSQL(); // 或者 Active := true; 或者 Open(); end; 【範例二】 with TADODataSet do begin Connection := TADOConnection1; //(某個ADO Connection物件)。 if not Connection.Connected then Connection.Connected := true; Active := true; // 或者 Open(); end; 【結論】 當你要執行取回資料集(select SQL)或者是做異動處理(insert, update, delete)之前,就經由上述程式碼讓程式「主動地」連結資料庫,不需要擔心TADOConnection物件被會系統切斷連結。
謝謝你的指導, 另外我想再請教一下, 我是否可以知道Connection是因為TADO自動斷線或是因為網路斷線所造成的, 因為如果是因為網路所造成斷線的原因, 如果使用上述的方法, 仍然是會造成無法連線, 同時因為連不上線的關係, client必須要等到30-40秒後, 系統才會回應connect error(如果網路仍在online下, connect大約只要1秒內即可connected), 如此會令使用者等得很不耐煩(因為本案對時間流程十分嚴格)!
Dalman
一般會員


發表:27
回覆:22
積分:24
註冊:2002-08-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-10-13 13:00:05 IP:211.74.xxx.xxx 未訂閱
歸納 TADOConnection.Connected 會無法為 true  的原因如下:    ‧Server-side 資料庫服務未啟動。Server-side 資料庫主機太忙或 TADOConnection 建立太多了。 若是要解決因網路斷連的問題,我的建議解法有下列: ‧使用 Win32 APIs 的 InternetCheckConnection(IPorURLStr, 0, 0)=true/false 函式來即時檢查是否可以與對方主機連線。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-10-13 23:01:42 IP:210.85.xxx.xxx 未訂閱
ConnectionString 字串有設定錯誤 這段如果在第一次可以連上時, 應該再連接時不致於發生有錯的現象! 有時候還必須設定「Extended Properties="Network Library=dbnmpntw";」這個在 MDAC 2.6 版以後有效,2.5版(含)之前設定了反而無法連結資料庫) 我倒是不知道有這項設定, 目前我deploy給客戶是MDAC 2.7版(在WIN98), 那這項最主要的用意在那, 是否可以加強穩定連線, 另外, 我在 ADOconnectionstring上並未看到這項設定, 那應該要加在那裡? Server-side 或 Client-side 電腦網路斷聯 資料庫主機太忙 我比較擔心的這個, 如果這個原因, 就會導致我上篇所說的連線很久才會回應ERROR, 不論我把 TIMEOUT 設定在多少秒就是會等上30-40秒 若是要解決因網路斷連的問題,我的建議解法有下列: 使用 Win32 APIs 的 InternetCheckConnection(IPorURLStr, 0, 0)=true/false 函式來即時檢查是否可以與對方主機連線。 sorry! IporUrlstr 內容應該要如何寫 謝謝!
Dalman
一般會員


發表:27
回覆:22
積分:24
註冊:2002-08-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-10-14 03:17:06 IP:211.74.xxx.xxx 未訂閱
‧使用 Win32 APIs 的 InternetCheckConnection(IPorURLStr, 0, 0)=true/false 函式來即時檢查是否可以與對方主機連線。    上面這個函式我下午試了一下(uses Delphi 的 WinInet 單元),不論將網路線拿掉或是重新接上 ADSL,它永遠傳回 false ... |||||,出乎預期結果。    所以另外思考方式為:    ‧使用 Thread Timer 方式(與 Delphi 提供的 TTimer 不一樣,而且實作方式有些不同),去執行嚐試與資料庫連結,若設定的 TimeOut 時間一到就判定網路斷連,立即結束 Thread。 ‧利用 ping 指令將結果存成文字檔,然後去判斷內容文字,就可以知道對方主機能不能連得上了。 ‧【函式範例】if InternetCheckConnection('168.95.1.1', 0, 0)= true then ... ‧【連結字串】TADOConnection.ConnectionString := 'provider=xxxxx;Data Source=zzzz;...;Extended Properties="Network Library=dbnmpntw"'; 這個是指應用程式安裝在 Client-side 電腦,但在 client-side 電腦並沒有安裝 SQL Server 或 SQL Server client,只有安裝 MDAC 2.6 版(含)以上,而應用程式必須透過網路向遠端 SQL Server 存取資料時,必須指定要使用哪個網路程式庫才好順利與 SQL Server 連結。因為參考資料我放在公司,所以白天到公司再 POST 上來
Dalman
一般會員


發表:27
回覆:22
積分:24
註冊:2002-08-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-10-14 09:37:42 IP:211.21.xxx.xxx 未訂閱
關於 Network library 的用法,微軟有下列這篇文章: HOWTO:在 ADO 連線字串中設定 SQL Server 網路程式庫 這篇文章中的資訊適用於:Microsoft Data Access Components 1.5, 2.0, 2.1, 2.1 (GA), 2.1 SP1, 2.1 SP2, 2.5, 2.6 SQL Server 可讓您從許多不同的網路程式庫中選擇您需要的,在連線時使用。您可以在為資料來源建立資料來源名稱 (DSN) 時設定這些網路程式庫。不過,另一種指定 DSN 的方式,是以連線字串傳入您想使用的網路程式庫。本文描述了當您從使用 ActiveX Data Objects (ADO) 的 Visual Basic 應用程式連線時,如何指定連線到 SQL Server 時欲使用的網路程式庫。 【其他相關資訊】 建立連線時,SQL Server 可讓您在建立連線時,使用下列網路程式庫。他們分別是: dbnmpntw - Win32 Named Pipes dbmssocn - Win32 Winsock TCP/IP dbmsspxn - Win32 SPX/IPX dbmsvinn - Win32 Banyan Vines dbmsrpcn - Win32 Multi-Protocol (Windows RPC) 透過 ADO 連線至 SQL Server 時,連線字串中的 NETWORK 參數可用來指定連線至資料庫時要使用哪些程式庫。NETWORK 參數是要使用的網路程式庫 (Net-Library) 模組之名稱,不包括 .dll 字尾 (如 Dbmssocn,非 Dbmssocn.dll)。以下是指定此參數的連線字串之範例: 連線字串(使用 Named Pipes 網路程式庫,透過 SQLOLEDB 提供者連線至 SQL Server)。 "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=YourDataSourceName;Network Library=dbnmpntw" 連線字串(使用 TCP/IP 網路程式庫透過 MSDASQL 提供者連線至 SQL Server)。 "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Extended Properties="DSN=yourdatasourcename;UID=sa;DATABASE=pubs;Network=dbmssocn";Initial Catalog=pubs"
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-04-04 12:56:28 IP:118.169.xxx.xxx 訂閱
版主你好,請問你有找到如果在connected := false時,可以直接讓db server上面的連線立即終斷嗎?謝謝,如果有的話可否分享一下如何解決這個問題,謝謝你。
請問一下,你是使用keepconnection := false,然後每次在使用adoquery等元件時,再將adoconnection.connected := TRUE;請問這樣可以解決讓sql server立即斷線的問題嗎?
謝謝。
------
DELPHI初學者
系統時間:2024-04-26 19:37:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!