在程式中,動態連到不同的 oracle database |
|
lacoste
一般會員 發表:8 回覆:1 積分:1 註冊:2002-05-02 發送簡訊給我 |
因為想在程式中...動態連到不同的 oracle database
所以就寫個小程式來捉 tnsnames.ora 裡的 tns name 資料
程式寫的不怎麼漂亮...請多多指教
procedure TfrmNewStationType.FormShow(Sender: TObject); var tstrTNS,tstrTNS_Name:tstringlist; i,j,iPos,iSLIndex:integer; Reg:TRegistry; sOracleHome,FileToFind,sTNS: string; begin // 找 ORACLE HOME 的路徑 Reg := Tregistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKeyReadOnly('\SOFTWARE\ORACLE\HOME0') then begin sOracleHome:=reg.ReadString('ORACLE_HOME'); reg.CloseKey; end; finally reg.Free; end; // 然後再找 TNSNAMES.ORA if trim(sOracleHome) <> '' then begin FileToFind:=FileSearch('tnsnames.ora',sOracleHome '\network\admin\'); if FileToFind <> '' then begin comboTNS.Clear; try tstrTNS:=tstringlist.Create; tstrTNS_Name :=tstringlist.Create; tstrTNS.LoadFromFile(FileToFind);// 將 TNSNAMES.ORA LOAD 到 TSTRINGLIST // 這迴圈是要將 註解提示符號 # 後的資料清掉,以及空的 ROW 清掉 - BEGIN for i:=tstrTNS.Count-1 downto 0 do begin iPos:=pos('#',tstrTNS.Strings[i]); if iPos <> 0 then begin tstrTNS.strings[i] := trim(copy(tstrTNS.strings[i],1,iPos-1)); end; if trim(tstrTNS.strings[i]) = '' then begin tstrTNS.Delete(i); end; end; // 這迴圈是要將 註解提示符號 # 後的資料清掉,以及空的 ROW 清掉 - END // 將 tstrTNS 的資料移到 sTNS - BEGIN sTNS:=''; for i:=0 to tstrTNS.Count-1 do begin sTNS:=sTNS trim(tstrTNS.strings[i]); end; tstrTNS.Clear; // 將 tstrTNS 的資料移到 sTNS - END // 這迴圈的目的是捉 TNS NAME - BEGIN iSLIndex:=0; tstrTNS.Add(''); for i:=0 to length(sTNS) do begin case sTNS[i] of '=': ; '(': begin tstrTNS.Add('('); tstrTNS.Add(''); iSLIndex:=iSLIndex 2; end; ')': begin j:= tstrTNS.count-1; while true do begin if tstrTNS.Strings[j] = '(' then begin tstrTNS.Delete(j); iSLIndex:=j-1; break; end else begin tstrTNS.Delete(j); end; dec(j); end; if tstrTNS.count = 1 then begin //將TNS NAME 另存在 tstrTNS_Name tstrTNS_Name.Add(trim(tstrTNS.Strings[0])); tstrTNS.Strings[0] := ''; end; end; else tstrTNS.Strings[iSLIndex]:=tstrTNS.Strings[iSLIndex] sTNS[i]; end; end; // 這迴圈的目的是捉 TNS NAME - END comboTNS.Items.Assign(tstrTNS_Name); finally tstrTNS_Name.Free; tstrTNS.Free; end; end; end; end; |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
不一定非搞 tnsnames.ora file 不可.
如 tnsname :
HORA8 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.15.1.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = HORA8) ) )其實 connect string 可以直接給後面的 description string 如 : (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST =192.15.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = HORA8))) 資料庫種類繁多, 記得先說用啥資料庫喔 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |