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
Author: Pancio
Date: Wed, 26 Apr 2017 02:09
Date: Wed, 26 Apr 2017 02:09
13 lines
692 bytes
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
Author: goo-mlyny@ciach.
Date: Thu, 27 Apr 2017 02:38
Date: Thu, 27 Apr 2017 02:38
75 lines
2108 bytes
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
Author: Pancio
Date: Thu, 27 Apr 2017 03:21
Date: Thu, 27 Apr 2017 03:21
13 lines
471 bytes
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