PDA

Ver la Versión Completa : listar servidores sql


jlgaytan
02-11-2006, 01:06:54
hola, un saludo para todos.
Tengo una pregunta a ver si alguien me puede ayudar, alguno de ustedes sabe como le puedo hacer para mostrar la lista de servidores sql server en la red.

Ejemplo: Me refiero a una lista parecida a la que se muestra en el cuadro de Administrador de datos de ODBC, en la opcion de SERVIDOR, claro creando el odbc para SQL Server.

mlara
08-11-2006, 01:39:33
Quizás haciendo consultas a los puertos en los que normalmente trabajan?

Neftali [Germán.Estévez]
08-11-2006, 11:24:58
Revisa éste código; Lo estuve probando hace un tiempo; No es mío, lo encontré por internet y tampoco pone ninguna referencia de la fuente original en el código.

jlgaytan
09-11-2006, 00:06:29
Gracias a mlara y a Neftali por responder.

Hola Neftali, el ejemplo del programa me ayuda un poco, pero el programa tiene sus bugs, por que en ocaciones ni siquiera muestra ningun servidor y en otras muestra talvez uno o dos.

Debido a que el programa trabaja con sockets, es un poco lento, asi que mejor voy a implementar un programa para que me muestre todos los equipos en la red y se selecione el servidor deseado.

Si se preguntan para que quiero hacer esto, es para conectar mi aplicacion con el servidor sql server al momento de crear el ODBC, ejemplo:

La primera vez que se ejecuta la aplicacion creo un ODBC mediante el registro de windows, cuando la base de datos es local no hay problema, el problema es cuando la aplicacion es remota porque tengo que saber cual PC tiene la base de datos para crear el ODBC hacia esa maquina.

Saludos.

oscarnoe
09-11-2006, 00:49:59
He encontrado este codigo, prueba a ver si te vale:


uses ComObj, Variants;

// ====================================================
// Load SQL Servers on a Network into a string list
// ====================================================

function EnumSqlServers(AStrings : TStrings) : boolean;
var
oDmo,oApp,oServers : OleVariant;
bResult : boolean;
i : integer;
begin
AStrings.Clear;

try
oDMO := CreateOleObject('SQLDMO.SQLServer');
oApp := oDMO.Application;
oServers := oApp.ListAvailableSQLServers;

try
AStrings.BeginUpdate;
for i := 1 to oServers.Count do
AStrings.Add(oServers.Item(i));
finally
AStrings.EndUpdate;
end;

bResult := true;
except
bResult := false;
end;

oServers := Unassigned;
oApp := Unassigned;
oDMO := Unassigned;

Result := bResult;
end;


Espero que te sea de ayuda.

Oscar Noe

jlgaytan
10-11-2006, 17:38:46
Gracias oscarnoe, este codigo trabaja muy bien y es justo lo que yo queria.