Para enumerar todos los servidores SQL Server de Microsoft disponibles, puede seguir este excelente tutorial:
Enumerating available SQL Servers. Retrieving databases on a SQL Server
Incluido en Zarko 's tutorial , hay un enlace a download the full source code que puede ser útil para probarlo rápidamente y comprobar si cabe nuestras necesidades.
rutina principal de Editar Zarko Gajic es:
procedure ListAvailableSQLServers(Names : TStrings);
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'); { 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;
no sé qué más puedo añadir, sin lamering lo Zarko de explicarse.
http://delphi.about.com/od/sqlservermsdeaccess/l/aa090704a.htm – Whiler
De hecho, utilicé el código vinculado de Whiler. Si convierte ese comentario a una respuesta y lo expande un poquito, lo aceptaré. –
Hecho ... pero como dije ... todo está explicado en su página y no quiero * robar * su contenido:/ – Whiler