Thread View: pl.comp.lang.delphi.bazy-danych
3 messages
3 total messages
Started by Pancio
Wed, 26 Apr 2017 09:09
Pobranie nazw instancji MS SQLa
Author: Pancio
Date: Wed, 26 Apr 2017 09:09
Date: Wed, 26 Apr 2017 09:09
7 lines
2051 bytes
2051 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
Date: Thu, 27 Apr 2017 09:38
Date: Thu, 27 Apr 2017 09:38
72 lines
3555 bytes
3555 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 10:21
Date: Thu, 27 Apr 2017 10:21
11 lines
1939 bytes
1939 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