• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi 从tnsnames.ora文件中获取Oracle服务名

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 1 //从注册表中读出tnsnames.ora路径并调用解析函数
 2 procedure TfmLogin.GetServer;
 3 var
 4   reg : Tregistry;
 5   regValue : TStrings;
 6   values : string;
 7 begin
 8   reg := TRegistry.Create;
 9   regValue := TStrings.Create;
10   try
11     reg.RootKey := HKEY_LOCAL_MACHINE;
12     reg.OpenKeyReadOnly('SOFTWARE\ORACLE\SYSMAN\OracleDBConsoleorcl');
13     //reg.GetValueNames(regValue);
14     values := reg.ReadString('ORACLE_HOME');
15     values := values + '\NETWORK\ADMIN\tnsnames.ora';
16     regValue := ParseTnsnames(values);
17     //ShowMessage(regValue.Text);
18     cbbDataSoure.Items := regValue;
19     cbbDataSoure.Items.Delete(cbbDataSoure.Items.Count-1);
20   finally
21     reg.CloseKey;
22     reg.Free;
23     regValue.Free;
24   end
25 
26 end;

--------------------------------------------------------------------------------------------------------------------
获取oracle主路径的改进版本,使用递归查找ORACLE_HOME键
 1 procedure TForm1.btn1Click(Sender: TObject);
 2 var
 3   reg : Tregistry;
 4   regValue : TStrings;
 5   values : string;
 6   regStr : string;
 7   i : Integer;
 8 begin
 9   regStr := 'SOFTWARE\ORACLE';
10   reg := TRegistry.Create;
11   regValue := TStrings.Create;
12 
13   reg.RootKey := HKEY_LOCAL_MACHINE;
14  //reg.OpenKeyReadOnly('SOFTWARE\ORACLE\SYSMAN\OracleDBConsoleorcl');
15 
16   values := GetPath(reg,regStr);
17  // ShowMessage(values);
18 
19   //values := reg.ReadString('ORACLE_HOME');
20   values := values + '\NETWORK\ADMIN\tnsnames.ora';
21   regValue := ParseTnsnames(values);
22   ShowMessage(regValue.Text);
23   cbb1.Items := regValue;
24   cbb1.Items.Delete(cbb1.Items.Count-1);
25 
26   reg.CloseKey;
27   reg.Free;
28   regValue.Free;
29 end;
30 
31 //从注册表中递归获取oracle主路径
32 function TForm1.GetPath(reg : Tregistry ; regPath : string): string;
33 var
34   haskey : TStringList;
35   i : Integer;
36 begin
37   haskey := TStringList.Create;
38   reg.CloseKey;
39   reg.OpenKeyReadOnly(regPath);  //注意要关闭之前的操作才能打开其他主键
40   Result := reg.ReadString('ORACLE_HOME');
41   if reg.HasSubKeys and (Result = '') then  //是否有子键
42   begin
43     reg.GetKeyNames(haskey);
44     for i := 0 to haskey.Count-1 do
45     begin
46       Result := GetPath(reg,regPath + '\' + haskey[i]);
47       if Result <> '' then
48          Break;
49     end;
50   end;
51   haskey.Free;
52   reg.CloseKey;
53 end;

 

 1 //获取tnsnames.ora文件的服务名
 2 function TfmLogin.ParseTnsnames(sFileName: String): TStrings;
 3 var
 4   output: string;
 5   fileLine: string;
 6   iGhCnt:integer;// 刮号数量,(加一, )减一;
 7   i, j: integer;
 8   sListSrc: TStringList;
 9   sListDec:TStringList;
10   iLength: integer;
11   lineChar: Char;
12 begin
13    sListSrc:=TStringList.Create;
14    sListDec:=TStringList.Create;
15    try
16    sListSrc.LoadFromFile(sFileName);
17    except
18      FreeAndNil(sListSrc);
19      result:= sListDec;
20      exit;
21    end;
22   iGhCnt:=0;
23   for I := 0 to sListSrc.Count - 1 do
24   begin
25     fileLine := sListSrc[i];
26     fileLine := trim(fileLine);
27     iLength := length(fileLine);
28     if (Length(fileLine) = 0) or (fileLine[1] = '#') then
29       Continue;
30 
31     for j := 1 to iLength do
32     begin
33       lineChar := fileLine[j];
34       if lineChar = '(' then
35          inc(iGhCnt)
36       else if (lineChar = ')') then
37         dec(iGhCnt)
38       else if (iGhCnt = 0) then
39         output := output + lineChar;
40     end;
41 
42   end;
43 
44     output:=StringReplace(output,'=',',',[rfReplaceAll]) ;
45 
46     if output='' then
47     begin
48      FreeAndNil(sListSrc);
49      result:= sListDec;
50      exit;
51     end;
52 
53    FreeAndNil(sListSrc);
54    sListDec.CommaText:=output;
55    result:=sListDec;
56 end;

参考:http://www.itpub.net/thread-1145748-1-1.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DelphiXE5android捕获几个事件发布时间:2022-07-18
下一篇:
Delphi编程建议遵守的规范1---缩进、各种语句的用法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap