Funciones para hallar servidores sql

Resulta que estoy haciendo un proyecto en delphi6 utilizando un servidor sql para mi BD.
Mi problema es que antes de establecer la conexión a la BD utilizo una función para buscar los dominios de windows disponibles. Eso me funciona a la perfección, pero mi problema es cuando utilizo una segunda función para determinar los servidores sql disponibles en ese dominio. La función es netserverenum de la netapi32.dll y el problema es que esto no es compatible con w95. Mi sistema operativo es w2000 y funciona perfecto pero deseo que ese no sea un requerimiento de mi aplicación.
¿Alguna alternativa que logre lo que deseo?
O sea que yo ya le presente al usuario una lista de servidores a la que puede conectarse.

1 Respuesta

Respuesta
1
Fijate si te sirve algo así:
unit uDomainInfo;
Interface
Uses
Windows, Classes, Sysutils;
const
NetApi32 = 'netapi32.dll';
ERROR_SUCCESS = 0;
ERROR_MORE_DATA = 234;
SV_TYPE_SERVER = $2;// 'Server type mask, all types of servers
SIZE_SI_101 = 24;
type
PSERVER_INFO_101 = ^SERVER_INFO_101;
SERVER_INFO_101 = record
dwPlatformId : integer;
lpszServerName: LPWSTR;
dwVersionMajor: integer;
dwVersionMinor: integer;
dwType: integer;
lpszComment: LPWSTR;
end;
//function NetApiBufferFree(BufPtr : pointer): integer; stdcall;
procedure GetServers(filter : Dword; const domain : string; list : TStrings);
Var
NetAPI: THandle;
_NetServerEnum: function(serverName : PWideChar; level : Integer;
var BufPtr : Pointer; prefMaxLen : Integer; var entriesRead,
totalEntries : Integer; servertype : Integer; domain : PWideChar;
var resume_handle : Integer) : integer; stdcall;
_NetApiBufferFree: function(BufPtr : pointer): integer; stdcall;
_SQLBrowseConnect: function(SQLHDBCConnectionHandle: THandle;
InConnectionString: string; StringLength1: integer;
OutConnectionString: PWideChar;
BufferLength: integer;
StringLength2Ptr: integer) :integer; stdcall;
implementation
procedure GetServers(filter : Dword; const domain : string; list : TStrings);
var
wServerName : WideString;
wDomain : WideString;
pwDomain : PWideChar;
rv : Dword;
p : PSERVER_INFO_101;
buffer : pointer;
i, entriesRead,
totalEntries, MAX_PREFERRED_LENGTH,
NIL_HANDLE : Integer;
ServerName : string;
begin
list.Clear;
ServerName := '';
wServerName := ServerName;
MAX_PREFERRED_LENGTH := -1;
wDomain := domain;
if domain = '' then
pwDomain := Nil
else
pwDomain := PWideChar (wDomain);
NetAPI := SafeLoadLibrary(NetApi32);
if NetAPI <> 0 then
begin
@_NetServerEnum := GetProcAddress(NetAPI, 'NetServerEnum');
@_NetAPIBufferFree := GetProcAddress(NetAPI, 'NetApiBufferFree');
end
else
Exit;
rv := _NetServerEnum (PWideChar (wServerName), 101, buffer, MAX_PREFERRED_LENGTH,
entriesRead, totalEntries, filter, pwDomain, NIL_HANDLE);
if rv = ERROR_SUCCESS then
try
p := PSERVER_INFO_101 (buffer);
for i := 0 to entriesRead - 1 do
begin
list.AddObject (p^.lpszServerName , TObject ( p^.dwPlatformId));
Inc(p)
end
finally
_NetAPIBufferFree(buffer);
end
else
raise Exception.CreateRes(rv);
end;
end.
And use this code to fill a combobox with the servernames:
procedure x
var lst : TStringList;
begin
lst := TStringList.Create;
GetServers($4, DOMAINNAME', lst);
ComboBox1.Items := lst;
end;
La página de donde saqué esto es:
http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20279642.html
Fijate si te sirve algo de allí.
Marcelo
gracias, algo como eso hice, aunque sin tanto rollo, lo que pasa que no puedo utilizar netserverenum porque dice la ayuda que no es compatible con windows95. De igual forma buscaré.Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas