Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.056 c
2-1156314634
Андрей Пазик
2006-08-23 10:30
2006.09.10
Создание кросс-массива


3-1152275543
Nikan_delphi
2006-07-07 16:32
2006.09.10
Определение размера полей таблицы


15-1155352711
ФаФо
2006-08-12 07:18
2006.09.10
Дыра в Виндос - это Эксплорер?


15-1155553934
Furyz
2006-08-14 15:12
2006.09.10
Интересно...


15-1155810587
besevl
2006-08-17 14:29
2006.09.10
Прошу совета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский