Hola, publico el único algoritmo que me ha funcionado en Delphi para encontrar los servidores activos de SQL disponible.
También listar servidores de sql server desde TSQL
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, ActiveX, ComObj, AdoInt, OleDB, StdCtrls;
procedure ListAvailableSQLServers(Names : TStrings);
var
RSCon : ADORecordsetConstruction;
Rowset : IRowset;
SourcesRowset : ISourcesRowset;
SourcesRecordset : _Recordset;
SourcesName, SourcesType : TField;
begin
OleCheck(CoCreateInstance(CLASS_Recordset, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IUnknown, SourcesRecordset) );
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'); { do not localize }
SourcesType := FieldByName('SOURCES_TYPE'); { do not localize }
Names.BeginUpdate;
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;
//Si queréis un ejemplo completo, con servidores sql server y bases de datos, descargadlo aquí