Enumerate SQL servers

Discussion of open issues, suggestions and bugs regarding UniDAC (Universal Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
dpallas
Posts: 3
Joined: Tue 18 Mar 2014 11:09

Enumerate SQL servers

Post by dpallas » Tue 18 Mar 2014 11:13

Is there a function / procedure for enumerating MS SQL servers?

dpallas
Posts: 3
Joined: Tue 18 Mar 2014 11:09

Re: Enumerate SQL servers

Post by dpallas » Wed 19 Mar 2014 23:39

I found a solution, but it doesn't enumerate ms sql instances

Code: Select all

Uses
  MSServicesUni;

.... 

Var
  Lista   : TStrings;
  ServEnum: TMSServerEnumerator;
begin
  Lista:=TStringList.Create;
  ServEnum:=TMSServerEnumerator.Create;
  ServEnum.GetServerList(Lista);
  ServEnum.Free;
  EdServers.Lines.AddStrings(Lista);
  Lista.Free;
end;

AlexP
Devart Team
Posts: 5530
Joined: Tue 10 Aug 2010 11:35

Re: Enumerate SQL servers

Post by AlexP » Thu 20 Mar 2014 12:37

To obtain names of existing instances on the server, you can use the UniConnection.GetDatabaseNames method. To obtain the list of instances with this method, connection to the server must be established.

Code: Select all

program Project1;

{$APPTYPE CONSOLE}

uses
  MSServicesUni,
  SysUtils,
  Classes,
  Uni,
  SQLServerUniProvider,
  ActiveX;

Var
  ServerList, InstanceList: TStringList;
  ServEnum: TMSServerEnumerator;
  i, j: integer;
  UniConnection: TUniConnection;
begin
  CoInitialize(nil);
  try
    ServerList := TStringList.Create;
    try
      ServEnum := TMSServerEnumerator.Create;
      try
        ServEnum.GetServerList(ServerList);
        UniConnection := TUniConnection.Create(nil);
        try
          UniConnection.ProviderName := 'SQL Server';
          UniConnection.Username := 'sa';
          for i := 0 to ServerList.Count - 1 do begin
            Writeln(ServerList[i]);
            UniConnection.Server := ServerList[i];
            UniConnection.Connect;
            InstanceList := TStringList.Create;
            try
              UniConnection.GetDatabaseNames(InstanceList);
              for  j := 0 to InstanceList.Count - 1 do
                Writeln(#9 + InstanceList[j]);
            finally
              InstanceList.Free;
              UniConnection.Disconnect;
            end;
          end;
        finally
          UniConnection.Free;
        end;
      finally
        ServEnum.Free;
      end;
    finally
      ServerList.Free;
    end;
  finally
    CoUninitialize;
    readln;
  end;
end.

Post Reply