Delphi 从tnsnames.ora文件中获取Oracle服务名
2013-04-08 11:39
429 查看
//从注册表中读出tnsnames.ora路径并调用解析函数 procedure TfmLogin.GetServer; var reg : Tregistry; regValue : TStrings; values : string; begin reg := TRegistry.Create; regValue := TStrings.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKeyReadOnly('SOFTWARE\ORACLE\SYSMAN\OracleDBConsoleorcl'); //reg.GetValueNames(regValue); values := reg.ReadString('ORACLE_HOME'); values := values + '\NETWORK\ADMIN\tnsnames.ora'; regValue := ParseTnsnames(values); //ShowMessage(regValue.Text); cbbDataSoure.Items := regValue; cbbDataSoure.Items.Delete(cbbDataSoure.Items.Count-1); finally reg.CloseKey; reg.Free; regValue.Free; end end; -------------------------------------------------------------------------------------------------------------------- 获取oracle主路径的改进版本,使用递归查找ORACLE_HOME键
procedure TForm1.btn1Click(Sender: TObject); var reg : Tregistry; regValue : TStrings; values : string; regStr : string; i : Integer; begin regStr := 'SOFTWARE\ORACLE'; reg := TRegistry.Create; regValue := TStrings.Create; reg.RootKey := HKEY_LOCAL_MACHINE; //reg.OpenKeyReadOnly('SOFTWARE\ORACLE\SYSMAN\OracleDBConsoleorcl'); values := GetPath(reg,regStr); // ShowMessage(values); //values := reg.ReadString('ORACLE_HOME'); values := values + '\NETWORK\ADMIN\tnsnames.ora'; regValue := ParseTnsnames(values); ShowMessage(regValue.Text); cbb1.Items := regValue; cbb1.Items.Delete(cbb1.Items.Count-1); reg.CloseKey; reg.Free; regValue.Free; end; //从注册表中递归获取oracle主路径 function TForm1.GetPath(reg : Tregistry ; regPath : string): string; var haskey : TStringList; i : Integer; begin haskey := TStringList.Create; reg.CloseKey; reg.OpenKeyReadOnly(regPath); //注意要关闭之前的操作才能打开其他主键 Result := reg.ReadString('ORACLE_HOME'); if reg.HasSubKeys and (Result = '') then //是否有子键 begin reg.GetKeyNames(haskey); for i := 0 to haskey.Count-1 do begin Result := GetPath(reg,regPath + '\' + haskey[i]); if Result <> '' then Break; end; end; haskey.Free; reg.CloseKey; end;
//获取tnsnames.ora文件的服务名 function TfmLogin.ParseTnsnames(sFileName: String): TStrings; var output: string; fileLine: string; iGhCnt:integer;// 刮号数量,(加一, )减一; i, j: integer; sListSrc: TStringList; sListDec:TStringList; iLength: integer; lineChar: Char; begin sListSrc:=TStringList.Create; sListDec:=TStringList.Create; try sListSrc.LoadFromFile(sFileName); except FreeAndNil(sListSrc); result:= sListDec; exit; end; iGhCnt:=0; for I := 0 to sListSrc.Count - 1 do begin fileLine := sListSrc[i]; fileLine := trim(fileLine); iLength := length(fileLine); if (Length(fileLine) = 0) or (fileLine[1] = '#') then Continue; for j := 1 to iLength do begin lineChar := fileLine[j]; if lineChar = '(' then inc(iGhCnt) else if (lineChar = ')') then dec(iGhCnt) else if (iGhCnt = 0) then output := output + lineChar; end; end; output:=StringReplace(output,'=',',',[rfReplaceAll]) ; if output='' then begin FreeAndNil(sListSrc); result:= sListDec; exit; end; FreeAndNil(sListSrc); sListDec.CommaText:=output; result:=sListDec; end;
参考:http://www.itpub.net/thread-1145748-1-1.html
相关文章推荐
- delphi获取oracle的tnsnames.ora服务器名
- Oracle中设置tnsnames.ora文件
- 认识oracle中的sqlnet.ora tnsnames.ora listener.ora三个文件
- Oracle 本地Net服务名配置 tnsnames.ora
- C# 读取tnsnames.ora 获取oracle配置列表
- (转)认识oracle中的sqlnet.ora tnsnames.ora listener.ora三个文件
- oracle的sqlnet.ora , tnsnames.ora , Listener.ora 文件的作用
- 怎么在TNSNAMES.ORA文件中配置本机装的oracle
- oracle的sqlnet.ora,tnsnames.ora,listener.ora三个配置文件
- 目录F:\oracle\product\10.2.0\db_1\NETWORK\ADMIN 下没有tnsnames.ora配置文件
- oracle的三个网络连接配置文件(listener.ora、sqlnet.ora、tnsnames.ora)
- Oracle的tnsnames.ora 监听配置文件详解
- 真心崩溃了,oracle安装完成后居然没有tnsnames.ora和listener.ora文件
- 认识oracle中的sqlnet.ora tnsnames.ora listener.ora三个文件
- ORACLE网络连接配置与文件:listener.ora、sqlnet.ora、tnsnames.ora
- 在TNSNAMES.ORA文件中配置本机装的oracle
- ORACLE配置,修改tnsnames.ora文件实例
- oracle中的三个配置文件:listener.ora、sqlnet.ora、tnsnames.ora
- oracle tnsnames.ora文件详解
- 目录F:\oracle\product\10.2.0\db_1\NETWORK\ADMIN 下没有tnsnames.ora配置文件