Solved

Retrieve list of IP Address from tnsnames.ora file.

Posted on 2007-11-20
9
1,138 Views
Last Modified: 2008-02-01
Hi Experts,

I want to write a code in delphi to find out the existing IP addresses in the tnsnames.ora file.
How can it be done.

Thanks
0
Comment
Question by:Asmitagoyal
  • 4
  • 4
9 Comments
 
LVL 19

Expert Comment

by:MerijnB
ID: 20326261
can you post the contents of the file you want to extract the ip's from?
0
 

Author Comment

by:Asmitagoyal
ID: 20326398
hi
the contents of the tnsnames.ora file are as under:

TEST1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.1)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )
  )

TEST2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.2)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )
  )

TEST3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.3)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )

These are the values stored in tnsnames.ora file. now through delphi code i want to get the list of all the IPs.
0
 
LVL 19

Accepted Solution

by:
MerijnB earned 200 total points
ID: 20326455
see this working example
procedure CollectIPs(FileName: string; IPs: TStringList; IncludePortNumbers: boolean);
const HOST_SEP = 'HOST = ';
      PORT_SEP = 'PORT = ';
var Data: TStringList;
    i: integer;
    p: integer;
    IP, Port: string;
begin
 Data := TStringList.Create();
 
 try
  Data.LoadFromFile(FileName);
 
  for i := 0 to Data.Count - 1 do
  begin
   IP := '';
   Port := '';
 
   p := Pos(HOST_SEP, Data[i]);
 
   if p > 0 then
   begin
    IP := Copy(Data[i], p + Length(HOST_SEP), 255);
    IP := LeftStr(IP, Pos(')', IP) - 1);
 
    if IncludePortNumbers then
    begin
     p := Pos(PORT_SEP, Data[i]);
 
     if p > 0 then
     begin
      Port := ':' + Copy(Data[i], p + Length(PORT_SEP), 255);
      Port := LeftStr(Port, Pos(')', Port) - 1);
     end;
 
     if IP <> '' then
      IPs.Add(IP + Port);
    end;
   end;
 
  end;
 
 finally
  Data.Free();
 end;
end;
 
procedure TForm2.Button1Click(Sender: TObject);
var IPs: TStringList;
begin
 IPs := TStringList.Create();
 
 try
  CollectIPs('c:\tnsnames.ora', IPs, true);
  IPs.SaveToFile('c:\addresses.lst');
 finally
  IPs.Free();
 end;
end;

Open in new window

0
Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

 

Author Comment

by:Asmitagoyal
ID: 20326793
Hi
This has solved the problem.
In continuation with this i've another problem.
Suppose i'm connected to Test2 server. Now is there any way to find out the location of the tnsnames.ora file and then get the IP address of the corresponding server.

Thanks
0
 
LVL 19

Expert Comment

by:MerijnB
ID: 20327007
do you mean you want to know where the tnsnames.ora file is located, or how to find an ip for given server (Test2) in this tnsnames.ora file?
0
 

Author Comment

by:Asmitagoyal
ID: 20327167
hi
you have told the solution for getting the IP address but is there any way to find the location of tnsnames.ora other than hardcoding it.

Thanks
0
 
LVL 19

Expert Comment

by:MerijnB
ID: 20327179
I don't know where it is normally located. Do you have any information on this?
0
 
LVL 1

Assisted Solution

by:Metalnib
Metalnib earned 50 total points
ID: 20327798
It can be found in the ORACLE_HOME/network/admin directory on the client, usually.
echo %ORACLE_HOME%
Or it can be in any directory pointed by TNS_ADMIN
But if you use DBX connection with SID, oracle driver will find it for you.
0
 

Author Comment

by:Asmitagoyal
ID: 20338443
Hi
i want a delphi code which automatically finds out the file. Is there any way to find it out.
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question