Главная страница
    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.49 MB
Время: 0.049 c
1-1154126106
Цукор5
2006-07-29 02:35
2006.09.10
Ссылка на кокласс внутри другого кокласса


3-1151520795
Chort
2006-06-28 22:53
2006.09.10
Создание связи между DBGrid, ADOConnection, DataSource, ADOTable


1-1153991453
mega83
2006-07-27 13:10
2006.09.10
Определение Офиса


15-1156065454
Dbn
2006-08-20 13:17
2006.09.10
Версия прошивки телефона


15-1155871534
Megabyte-CeerCop
2006-08-18 07:25
2006.09.10
[Linker Error] Fatal: Access violation. Link terminated.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский