連線到遠端資料庫的連線問題.. |
尚未結案
|
jackwu
一般會員 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
各位:
我所使用的BCB5版本為Professional版,沒有ADO元件,所以採用ODBC連線到遠端的資料庫,並測試成功(前提是已經先登入到遠端的PC)。為了省去每次都要登入到遠端PC的步驟所以我設定一個遠端PC的網路磁碟,這樣每次開機都可以連上線,但是現在發現一個問題,就是網路磁碟機容易斷線,所以可能有時開始執行資料庫程式時,會出現找不到資料庫的訊息,請問各位:
1.現在使用ODBC的方式連結,就必須先登入遠端PC,如果不登入PC是否有方法可以連線呢?因為使用網路磁碟機不是每次都能登入..
2.要用什麼方式可以保持資料庫一直連線而不斷線呢?因為有時可能會被主機給踢出.. 作業系統:
Client端使用 Win2000 Professional
Server端使用 Win2000 Server
Client 端同時會有超過10部的PC與Server連線 謝謝
|
jackwu
一般會員 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
因為都沒有人回信,所以我測試了以下的方式,不知道可不可行,請各位大大給點意見:
如果我要寫入資料至資料庫時,我先判斷資料庫是否連結,如果沒有連結則先將網路磁碟機斷線,在連線,之後再將Query連結至遠端資料庫,下面是網路磁碟機的程式。(這是我參考 C++Builder揭開互助社群軟體-Napster的秘密 Internet與TCP/IP進機程式設計 所寫出來的)
Password = Edit2->Text; UserName = Edit1->Text; if(Password == "" || UserName == "") { MessageDlg("請輸入使用者名稱及密碼!!", mtError, TMsgDlgButtons() << mbOK, 0); return; } lPassword = Password.c_str(); lUserName = UserName.c_str(); dwResult = WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_DISK, RESOURCEUSAGE_CONNECTABLE, NULL, &hEnum); if((dwResult == NO_ERROR) && (hEnum != 0x00000000)) { LR = (LPNETRESOURCE) GlobalAlloc(GPTR, dwLength); ZeroMemory(LR, dwLength); dwResult = WNetEnumResource(hEnum, &lpcCount, LR, &dwLength); if(dwResult == NO_ERROR) { for(int i=0; i當上面的網路磁碟機再度連線才將TQuery連至Server 在請問各位大大,如我在先前問的問題: 使用ODBC的方式連結,就必須先登入遠端PC,如果不登入PC是否有方法可以連線呢? 請問有解嗎? 發表人 - jackwu 於 2003/09/02 15:26:58 |
kuochih
一般會員 發表:2 回覆:8 積分:2 註冊:2003-07-17 發送簡訊給我 |
jackwu 你好, 我是使用BDE連結Mysql
BDE中有個Database元件
設定好Database的參數之後
可免去使用者每次登入都須輸入帳號密碼的步驟
也可保持資料庫一直連線 database元件設定方法如下: (double click database元件可進入設定畫面)
1. 設定 Name欄位,
指定該database元件的名稱,若你使用query元件,
可在query元件的database屬性指定該名稱即可。 2. 設定 Alias name,
這個屬性負責連結BDE 目前所連結到可用的資料庫 3. 設定 Parameter overrides,
加入 username=您的帳號
password=您的密碼 4. 另外,
屬性 KeepConnection 設為true
可保持資料庫一直連線
屬性 LoginPrompt 設為false
可省去每次登入皆須輸入帳號密碼的步驟 希望對你有所幫助。
|
jackwu
一般會員 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
kuochih 你好:
其實我的連線方式也是和你所寫的一樣,我也察看過我的程式,其中Dtabase元件中的KeepConnection也是True(Default值),但是我現在連不上資料庫並不是因為資料庫的斷線,而是Win2000 Server將遠端使用者踢出,當有這樣的情形,我就必須再登入Server中才能再寫入資料(這一段是我個人的見解,不知道對不對?)
例如說:假設我必須先以Name:User PW:User先登入到Server中,且在在ODBC中設定連結到資料庫的Name:DB PW:DB,那ODBC才能連結到Server遠端的資庫中,並測試連結成功,這樣我的程式才可以透過Query元件將資料寫入到資料庫中。如果我所登入到Server的名稱被踢出,那麼資料庫就無法連結,當然寫入資料也會失敗,請問這樣要如何解決呢?
|
jackwu
一般會員 發表:28 回覆:54 積分:16 註冊:2002-08-18 發送簡訊給我 |
各位:
其實我好像將這個問題想得太複雜了,應該只要判斷Database是否有連結到資料庫,像這樣
if(!Database->Connected) Database->Connected = true;原本我以為這樣就可以了,但當我連上資料庫後,由Server將使用者踢出從"我的電腦"按右鍵->管理->在"系統工具"底下有一個"共用資料夾"的底下有一個"工作階段"假設我的登入名稱為"aa",那將aa"關閉工作階段"之後,再從我的程式要寫入資料到資料庫中,並且在寫入之前有也有做Connected的判斷,但是其Connected還是true,所以寫入資料庫會出錯,錯誤訊息如下: Project test.exe raised exception class EDBEngineError with message 'General QL error. [Microsoft][ODBC QL erver Driver][Named Pipes]Connection Write(WrapperWrite()). [Microsoft][ODBC QL erver Driver][Named Pipes]一般網路錯誤。查閱您的網路文件。'.Process stop. Use tep or Run to continue. 所以請問各位前輩,我要如何去判斷Database是否連線呢? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |