| Цитата | | Петрович , очень хотелось бы посмотреть код, хотя бы под NT. Заранее спасибо. |
Сори, забыл включить подписку на тему. Вот, может уже и не нужно, но выкладываю:
| Код | procedure NetEnumServers(aList :tStrings; ServersType :Cardinal =SV_TYPE_ALL); // Заполняет aList списком серверов обнаруженных в сети, соответствующего типа. // Только под WinNT. // Ex: EWNetError var pBuf :Pointer; Count, TotalEntries, ResumeHandle :Cardinal; Res :NET_API_STATUS; pEntry :PServerInfo101; begin { TODO : Для Win9x наверное надо NetGetListComputers(aList) и далее NetServerGetInfo } pBuf := nil; ResumeHandle := 0; aList.BeginUpdate; aList.Clear; try Res := NetServerEnum (Nil ,101,pBuf,MAX_PREFERRED_LENGTH ,Count,TotalEntries ,ServersType ,nil,@ResumeHandle); if not (Res in [NERR_Success,ERROR_MORE_DATA]) then raise EWNetErrorCreate(Res, 'Error NetServerEnum');
if pBuf <> nil then begin pEntry := pBuf; while Count > 0 do begin with pEntry^ do aList.Add(sv101_name // +', Platform: ' +ServerPlatformIdToStr(sv101_platform_id) // +' v'+IntToStr(sv101_version_major)+'.'+IntToStr(sv101_version_minor) // +', Type:' +ServerTypeToStr(sv101_type) // +', Comment:' +q2(sv101_comment) ); Inc(pEntry); Dec(Count); end; //while
// if Res = ERROR_MORE_DATA then // Log('More entries available!!!|Total entries: '+IntToStr(TotalEntries)); end; //if pBuf <> nil
finally aList.EndUpdate; if pBuf <> nil then NetApiBufferFree(pBuf); end; end;
|
Закомментированны строки использованные при отладке. Соответственно, получение списка именно MS-SQL-серверов будет выглядеть так:
| Код | procedure NetGetListSQLServers (aList :tStrings); begin NetEnumServers(aList,SV_TYPE_SQLSERVER); end; |
Если будет интересно, могу и под Win9x выложить. |