Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизКак получить список серверов MS SQL в сети? Найти похожие ветки
← →
Карелин Артем © (2005-10-27 10:49) [0]Есть сеть доменная. Вопрос в теме.
← →
Johnmen © (2005-10-27 12:15) [1]http://delphimaster.net/view/3-1127135003/
← →
Карелин Артем © (2005-10-27 12:45) [2]Произошла ошибка:
Не найдена ветка № 1127135003, возможно она была удалена или перенесена в другой форум.
← →
Johnmen © (2005-10-27 13:27) [3]Уже ушла в историю...:)
uses ComObj;
var
v : variant;
i : integer;
...
v:=CreateOleObject("SQLDMO.Application");
Memo.Clear ;
if v.ListAvailableSQLServers.Count>0 then
for i:=1 to v.ListAvailableSQLServers.Count do
Memo.Lines.Add(v.ListAvailableSQLServers.Item(i));
...
← →
Курдль © (2005-10-27 13:35) [4]
unit FMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Winsock;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure GetServersList(Storage: TStrings);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
GetServersList(Memo1.Lines);
end;
procedure TForm1.GetServersList(Storage: TStrings);
var
hSocket: TSocket;
WSAData: TWSAData;
Buf: array[0..65535] of byte;
i, iBeg, tRes, tLenSA, tLenBufRecv, tFlagStep: integer;
tLenBufIOCTL: u_long;
S, S2, S3: AnsiString;
saSQLSend, saSQLRecv: sockaddr_in;
Data: byte;
const
fBroadcast: boolean = True;
begin
Data := $02;
Storage.Clear;
WSAStartup(MakeWord(2,2), WSAData);
//Ïîëó÷åíèå äåñêðèïòîðà ñîêåòà UDP
hSocket := Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (hSocket = INVALID_SOCKET) then exit;
//Óñòàíîâêà îïöèé ñîêåòà
tRes := setsockopt(hSocket, SOL_SOCKET{IPPROTO_TCP}, SO_BROADCAST, @fBroadcast,sizeof(BOOL));
if (tRes = SOCKET_ERROR) then
begin
closeSocket(hSocket);
exit;
end;
//Óñòàíîâêà äàííûõ ñëóæåáíîé ñòðóêòóðû sockaddr_in
saSQLSend.sin_family := AF_INET;
saSQLSend.sin_port := htons(1434);
saSQLSend.sin_addr.s_addr := htonl(INADDR_BROADCAST);
//Ïîñûëêà øèðîêîâåùàòåëüíîãî ñîîáùåíèÿ
tRes := sendto(hSocket, Data, 1, 0, saSQLSend, sizeof(SOCKADDR_IN));
if (tRes = SOCKET_ERROR) then
begin
closeSocket(hSocket);
exit;
end;
Sleep(100);
//
tRes := ioctlSocket(hSocket,FIONREAD,tLenBufIOCTL);
if (tRes = SOCKET_ERROR) then
begin
closeSocket(hSocket);
exit;
end;
if (tLenBufIOCTL > 0) then
begin
tFlagStep := 0;
tLenSA := sizeof(SOCKADDR_IN);
saSQLRecv := saSQLSend;
while tLenBufIOCTL > 0 do
begin
tLenBufRecv := recvfrom(hSocket, Buf, 65535, 0, saSQLRecv, tLenSA);
tLenBufIOCTL := tLenBufIOCTL - tLenBufRecv;
if(tLenBufRecv=SOCKET_ERROR) then
begin
closeSocket(hSocket);
exit;
end;
iBeg := 1;
S2 := "";
for i := 3 to tLenBufRecv - 3 do S2 := S2 + Chr(Buf[i]);
tLenBufRecv := tLenBufRecv - 3;
for i := 1 to tLenBufRecv - 3 do
begin
if(S2[i]=";") then
begin
S := Copy(S2,iBeg,i - iBeg);
if (tFlagStep=1) then S3 := S;
if (tFlagStep=2) then
begin
if(S <> "MSSQLSERVER") then S3 := S3 + ("\\" + S);
Storage.Add(S3);
S3 := "";
end;
tFlagStep := 0;
if(S="ServerName") then tFlagStep := 1;
if(S="InstanceName") then tFlagStep := 2;
iBeg := i + 1;
end;
end;
end;
end;
closeSocket(hSocket);
WSACleanup;
end;
end.
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.036 c