🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
3 messages
3 total messages Started by Pancio Wed, 26 Apr 2017 02:09
Pobranie nazw instancji MS SQLa
#81052
Author: Pancio
Date: Wed, 26 Apr 2017 02:09
13 lines
692 bytes
Witam,
Pisze wlasnie w Delphi XE7 krotki modul do mojej glownej aplikacji, ktory ma za zadanie pobranie listy dostepnych serwerow MS SQL oraz nazwy ich instancji. Caly problem w tym, ze nie moge pobierac tych danych bezposrednio z rejestru Windowsa, bo lacze sie z serwerem po sieci (nie jest to serwer/baza na dysku lokalnym).
O ile znalazlem w internecie rozwiazanie z pobraniem listy nazw serwera (serwerow), to nie moge poradzic sobie z procedura, ktora pobralaby liste nazw instancji przypisanych do danego serwera MS SQL.
Czy ktos z Was przerabial to moze juz u siebie i moglby mi podsunac jakis link (lub na maila kawalek kodu odpowiedzialnego za w/w zadanie)?

--
Pancio
Re: Pobranie nazw instancji MS SQLa
#81053
Author: goo-mlyny@ciach.
Date: Thu, 27 Apr 2017 02:38
75 lines
2108 bytes
W dniu środa, 26 kwietnia 2017 11:09:36 UTC+2 użytkownik Pancio napisał:
> O ile znalazlem w internecie rozwiazanie z pobraniem listy nazw serwera (serwerow), to nie moge poradzic sobie z procedura, ktora pobralaby liste nazw instancji przypisanych do danego serwera MS SQL.
> Czy ktos z Was przerabial to moze juz u siebie i moglby mi podsunac jakis link (lub na maila kawalek kodu odpowiedzialnego za w/w zadanie)?
Spróbuj może takiej procedury:
procedure ListAvailableSQLServers(Names: TStringList);
var
  RSCon: ADORecordsetConstruction;
  Rowset: IRowset;
  SourcesRowset: ISourcesRowset;
  SourcesRecordset: _Recordset;
  SourcesName, SourcesType: TField;

function PtCreateADOObject(const ClassID: TGUID): IUnknown;
var
  Status: HResult;
  FPUControlWord: Word;
begin
  asm
    FNSTCW FPUControlWord
  end;
  Status := CoCreateInstance(
              CLASS_Recordset,
              nil,
              CLSCTX_INPROC_SERVER or
              CLSCTX_LOCAL_SERVER,
              IUnknown,
              Result);
  asm
    FNCLEX
    FLDCW FPUControlWord
  end;
  OleCheck(Status);
end;

begin
  SourcesRecordset :=
       PtCreateADOObject(CLASS_Recordset)
       as _Recordset;
  RSCon :=
       SourcesRecordset
       as ADORecordsetConstruction;
   SourcesRowset :=
       CreateComObject(ProgIDToClassID('SQLOLEDB Enumerator'))
       as ISourcesRowset;
   OleCheck(SourcesRowset.GetSourcesRowset(
            nil,
            IRowset, 0,
            nil,
            IUnknown(Rowset)));
   RSCon.Rowset := RowSet;
   with TADODataSet.Create(nil) do
   try
     Recordset := SourcesRecordset;
     SourcesName := FieldByName('SOURCES_NAME');
     SourcesType := FieldByName('SOURCES_TYPE');
     Names.BeginUpdate;
     Names.Clear;
     try
        while not EOF do
        begin
          if (SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE) and
             (SourcesName.AsString <> '') then
            Names.Add(SourcesName.AsString);
          Next;
        end;
     finally
        Names.EndUpdate;
     end;
  finally
     Free;
  end;
end;
Re: Pobranie nazw instancji MS SQLa
#81054
Author: Pancio
Date: Thu, 27 Apr 2017 03:21
13 lines
471 bytes
> Spróbuj może takiej procedury:
> procedure ListAvailableSQLServers(Names: TStringList);
(ciach)

Dziala to jakos koslawo. Pobiera nazwy wszystkich serwerow, ale juz z instancjami gubi sie i niektorych nie wykrywa (nie wiem dlaczego).
Podejrzewam, ze przyklad podales ze strony  http://www.delphigroups.info/2/5c/214177.html

Wczesniej tez juz probowalem tego rozwiazania i nie do konca u mnie to dziala. Ale rzecz jasna dziekuje za odpowiedz.

--
Pancio
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads