Текущий архив: 2005.07.31;
Скачать: CL | DM;
ВнизMS SQL Client -> MS SQL Server Найти похожие ветки
← →
Homa_Programer © (2005-05-19 08:26) [0]Как в сети найти компы на которых установлен MS SQL Server???
в сети около сотни компов из них надо выбрать только те у которых есть сервак базы данных :(
← →
app © (2005-05-19 08:48) [1]Сканирование всех компьютеров и всех портов в общем случае, сканирование порта 1434 и/или 1433 в частном.
← →
Anatoly Podgoretsky © (2005-05-19 08:50) [2]Проще издать приказ, что бы пользователи в установленный срок сообщили об установленных у них серверах, со штрафными мерами.
А другие SQL сервера, что не интересуют, почему дискриманация по отношению к MSSQL
← →
ANB © (2005-05-19 09:14) [3]NetServerEnum + F1.
← →
alex_*** (2005-05-19 10:57) [4]можно у DMO спросить еще, в принципе, только он может не показать сервера, не настроенные нормально (точнее не знаю - у меня не показывал сервера, которые не пинговались по DNS, дальше не разбирался)
← →
Homa_Programer © (2005-05-19 23:28) [5]> app © (19.05.05 08:48) [1] > Сканирование всех компьютеров
это кажется не лучший вариант... и займет многа времени...
> Проще издать приказ, что бы пользователи в установленный
> срок сообщили об установленных у них серверах, со штрафными
> мерами.
это кажется не по теме...
> ANB © (19.05.05 09:14) [3]
> NetServerEnum + F1.
а подробнее не подскажешь???
← →
Reindeer Moss Eater © (2005-05-19 23:30) [6]> NetServerEnum + F1.
а подробнее не подскажешь???
А подробнее и не надо потому что это не всегда работает.
← →
liver (2005-05-20 09:32) [7]
unit NetSrvList;
interface
uses Classes;
const
SV_TYPE_WORKSTATION = $00000001;// All LAN Manager workstations
SV_TYPE_SERVER = $00000002;// All LAN Manager servers
SV_TYPE_SQLSERVER = $00000004;// Any server running with Microsoft SQL Server
SV_TYPE_DOMAIN_CTRL = $00000008;// Primary domain controller
SV_TYPE_DOMAIN_BAKCTRL = $00000010;// Backup domain controller
SV_TYPE_TIMESOURCE = $00000020;// Server running the Timesource service
SV_TYPE_AFP = $00000040;// Apple File Protocol servers
SV_TYPE_NOVELL = $00000080;// Novell servers
SV_TYPE_DOMAIN_MEMBER = $00000100;// LAN Manager 2.x Domain Member
SV_TYPE_LOCAL_LIST_ONLY = $40000000;// Servers maintained by the browser
SV_TYPE_PRINT = $00000200;// Server sharing print queue
SV_TYPE_DIALIN = $00000400;// Server running dial-in service
SV_TYPE_XENIX_SERVER = $00000800;// Xenix server
SV_TYPE_MFPN = $00004000;// Microsoft File and Print for Netware
SV_TYPE_NT = $00001000;// Windows NT (either Workstation or Server)
SV_TYPE_WFW = $00002000;// Server running Windows for Workgroups
SV_TYPE_SERVER_NT = $00008000;// Windows NT non-DC server
SV_TYPE_POTENTIAL_BROWSER = $00010000;// Server that can run the Browser service
SV_TYPE_BACKUP_BROWSER = $00020000;// Server running a Browser service as backup
SV_TYPE_MASTER_BROWSER = $00040000;// Server running the master Browser service
SV_TYPE_DOMAIN_MASTER = $00080000;// Server running the domain master Browser
SV_TYPE_DOMAIN_ENUM = $80000000;// Primary Domain
SV_TYPE_WINDOWS = $00400000;// Windows 95 or later
SV_TYPE_ALL = $FFFFFFFF;// All servers
type
TServerInfo = class( TObject )
svr_Platform_ID : integer;
svr_Name : WideString;
svr_Version_Major,
svr_Version_Minor,
svr_Type : integer;
svr_Comment : WideString;
end;
TServerList = class( TObject )
protected
FList : TList;
FServer, FDomain : WideString;
FServerMask : longint;
procedure Clear;
function GetServer( Index : integer ) : TServerInfo;
function GetCount : integer;
public
constructor Create( AServer, ADomain : string; AServerMask : longint );
destructor Destroy; override;
procedure Refresh;
property Servers[ index : integer ] : TServerInfo read GetServer; default;
property Count : integer read GetCount;
end;
implementation
type
TServer_Info_101 = record
svr_Platform_ID : integer;
svr_Name : PWideChar;
svr_Version_Major,
svr_Version_Minor,
svr_Type : integer;
svr_Comment : PWideChar;
end;
TServer_Infos_101 = array [1..($1FFFFFFF div SizeOf( TServer_Info_101 ))] of TServer_Info_101;
function NetServerEnum( ServerName : PWideChar; Level : longint;
var BufPtr : pointer; PrefMaxLen : longint;
var EntriesRead, TotalEntries : longint;
ServType : longint; Domain : PWideChar;
var ResumeHandle : integer ) : longint;
stdcall; external "netapi32.dll" name "NetServerEnum";
constructor TServerList.Create( AServer, ADomain : string; AServerMask : longint );
begin
inherited Create;
Flist := TList.Create;
FServer := Aserver;
FDomain := ADomain;
FServerMask := AServerMask;
Refresh;
end;
destructor TServerList.Destroy;
begin
Clear;
FList.Free;
inherited Destroy;
end;
function TServerList.GetServer( Index : integer ) : TServerInfo;
begin
Result := TServerInfo( FList[ Index ]);
end;
function TServerList.GetCount : integer;
begin
Result := FList.Count;
end;
procedure TServerList.Clear;
var
i : integer;
begin
for i := 0 to FList.Count - 1 do
Servers[ i ].Free;
Flist.Clear;
end;
procedure TServerList.Refresh;
var
EntRead, EntTotal, Resume, SrvCount, i : integer;
Info : integer;
Itm : TServerInfo;
Data : pointer;
pServer, pDomain : PWideChar;
begin
if FServer <> "" then
pServer := PWideChar( FServer )
else pServer := nil;
if FDomain <> "" then
pDomain := PWideChar( FDomain )
else pDomain := nil;
Clear;
//Получаем количество серверов указанного типа
Info := NetServerEnum( pServer, 101, Data, 0, EntRead, SrvCount,
FServerMask, pDomain, Resume );
//60 * SrvCount - столько памяти выделяется под буфер
//предполагается, что вся информация суда влезет.
//Реально - может и не влезть. Хотя, пока такого
//не было.
Info := NetServerEnum( pServer , 101, Data, 60 * SrvCount, EntRead, EntTotal,
FServerMask, pDomain, Resume );
for i := 1 to EntRead do begin
Itm := TServerInfo.Create;
with TServer_Infos_101( Data^ )[ i ] do begin
Itm.svr_Platform_ID := svr_Platform_ID;
Itm.svr_Name := svr_Name;
Itm.svr_Version_Major := svr_Version_Major;
Itm.svr_Version_Minor := svr_Version_Minor;
Itm.svr_Type := svr_Type;
Itm.svr_Comment := svr_Comment;
end;
FList.Add( Itm );
end;
end;
end.
использовать так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Uses
NetSrvList;
procedure TForm1.Button1Click(Sender: TObject);
var
L : TServerList;
i : integer;
begin
ListBox1.Clear;
L := TServerList.Create( "", "", SV_TYPE_SQLSERVER );
try
for i := 0 to L.Count - 1 do
begin
ListBox1.Items.Add( L[i].svr_Name );
end;
finally
L.Free;
end;
end;
end.
← →
paul_k © (2005-05-20 12:48) [8]ну или к Active Directory обратится, если домен настроен
← →
Homa_Programer © (2005-05-24 10:16) [9]
> liver (20.05.05 09:32) [7]
БЛАГОДАРЮ!
ЩАС же и прверю :)
← →
sniknik © (2005-05-24 12:06) [10]liver (20.05.05 09:32) [7]
это только для одной подсети, если в сети несколько доменов/подсетей, то выдаст только что есть в текущей.
Homa_Programer © (24.05.05 10:16) [9]
а говорил сканирование не подходит.. > "это кажется не лучший вариант... и займет многа времени..."
← →
Fay © (2005-05-24 16:54) [11]app © (19.05.05 8:48) [1]
Ага. А если сервак слушает только пайпы?
← →
ANB © (2005-05-24 16:55) [12]
> Ага. А если сервак слушает только пайпы?
MS SQL Server ??????
← →
Fay © (2005-05-24 17:03) [13]ANB © (24.05.05 16:55) [12]
ДА!!!!!!!!!!!!!
← →
Anatoly Podgoretsky © (2005-05-24 19:07) [14]ANB © (24.05.05 16:55) [12]
А чего смущает, поддержаны по крайней мере 6 протоколов, так что и pipes может не быть, не говорю уж про TCP/IP
Fay © (24.05.05 16:54) [11]
А там есть оговорка "в общем случае" :-)
← →
Homa_Programer © (2005-06-07 07:30) [15]
> liver (20.05.05 09:32) [7]
не знаю почему, но работает не правильно! т.е. выводит не все серваки!!!
← →
Anatoly Podgoretsky © (2005-06-07 09:23) [16]Homa_Programer © (07.06.05 07:30) [15]
Читаем Anatoly Podgoretsky © (19.05.05 08:50) [2]
← →
Homa_Programer © (2005-06-07 12:41) [17]
> Читаем Anatoly Podgoretsky © (19.05.05 08:50) [2]
читали!
только как ето будет выглядеть если ради одной проги издавать такой приказ? гдупости..
← →
sniknik © (2005-06-07 13:08) [18]а другого не остается, все mssql сервера все одно не определить програмными средствами (есть компы вообще от сети отключенные, есть за файрволами даже пинги не проходят, есть настроены так что сами сети не видят... и т.д. и на все возможны устаны mssql).
не говоря уже о том что приведенный код с ограничением (про которое говирил и которое успешно проигнорировалось)
← →
NOlik (2005-06-22 08:16) [19]кстати, таким способом NamedInstance не найти - только с именем по умолчанию. И работает это все только по WinNT - а людям с Win98 можно повеситься с горя
← →
ANB © (2005-06-22 08:27) [20]
> а людям с Win98 можно повеситься с горя
- зачем вешаться ? Можно тоже NT поставить и будет счастье.
Страницы: 1 вся ветка
Текущий архив: 2005.07.31;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.041 c