Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

Определить список серверов   Найти похожие ветки 

 
MsGuns ©   (2006-06-26 11:12) [0]

Как программно определить список активных серверов ?
Причем они могут быть разных версий  

Спасибо


 
Johnmen ©   (2006-06-26 11:57) [1]

Вот из фака. М.б. подойдёт...
var
 v: variant;
 i: integer;
...
v:=CreateOleObject("SQLDMO.Application");
Memo.Lines.Clear ;
if v.ListAvailableSQLServers.Count>0 then begin
 for i:=1 to v.ListAvailableSQLServers.Count do
   Memo.Lines.Add(v.ListAvailableSQLServers.item(i));
 end;


 
MsGuns ©   (2006-06-26 12:51) [2]

EOleSysError "Член группы не найден"


 
AxelBlack ©   (2006-06-26 13:04) [3]

SQLDMO нет на данной машине?


 
MsGuns ©   (2006-06-26 13:07) [4]

v.ListAvailableSQLServers.Count возвращает 1
Item нету.


 
AxelBlack ©   (2006-06-26 13:13) [5]


> MsGuns ©   (26.06.06 13:07) [4]
> v.ListAvailableSQLServers.Count возвращает 1
> Item нету.

Item = "." ?

+

> MsGuns ©   (26.06.06 11:12)  
> Как программно определить список активных серверов ?

NetServerEnum


 
MsGuns ©   (2006-06-26 13:18) [6]

Не совсем понял. Как будет выглядеть строка

 v.ListAvailableSQLServers...

  ?


 
MsGuns ©   (2006-06-26 13:21) [7]

И еще: дайте, пожалуйста, ссылку где почитать об SQLDMO, инет страшно глючный, прокся отказывается от поисковиков ;(((


 
AxelBlack ©   (2006-06-26 13:50) [8]


> MsGuns ©   (26.06.06 13:21) [7]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sqldmo/dmoref_ob_3tlx.asp

for SQL2005 - see SQL-SMO
SQL Server Management Objects (SMO) is a new managed code object model that replaces SQL Distributed Management Objects (SQL-DMO)
http://msdn2.microsoft.com/en-us/library/ms203817.aspx


 
Курдль ©   (2006-06-26 14:12) [9]

У меня есть дома где-то код, опрашивающий широковещательным запросом все доступные хосты по порту MS SQL. Если не забуду - завтра поищу.


 
Fay ©   (2006-06-26 18:21) [10]

> все доступные хосты
ВСЕ ?!!


 
Курдль ©   (2006-06-28 09:21) [11]


> не забуду - завтра поищу.


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.



 
Fay ©   (2006-06-28 09:35) [12]

2 Курдль ©   (28.06.06 9:21) [11]
А это не очень жирно?
WSAStartup(MakeWord(2,2), WSAData);
//Получение дескриптора сокета UDP
hSocket := Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (hSocket = INVALID_SOCKET) then exit;


 
MsGuns ©   (2006-06-29 14:29) [13]

>Johnmen ©   (26.06.06 11:57) [1]

Списибо за наводку (SQL-DMO),- будем рыть ;)

>Курдль ©   (28.06.06 09:21) [11]

Огромное спасибо ! Проблема решена



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
15-1155639110
Rouse_
2006-08-15 14:51
2006.09.10
Хех, народ хочет сделать Дельфи опенсорсным проектом :)


1-1154084224
Mouserx
2006-07-28 14:57
2006.09.10
Проблема с получением правильного числа при конвертации.


15-1155627150
vidiv
2006-08-15 11:32
2006.09.10
Вопрос по HTML про <img ismap> и javascript


2-1156272009
anton773
2006-08-22 22:40
2006.09.10
Shellexecute


3-1151581247
Ищущий
2006-06-29 15:40
2006.09.10
данные хранимки как основа