Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить список MSSQL-серверов, зарегистрированных в сети [D7, MSSQL]


kas ©   (2004-05-06 15:52:00) 

Как получить список MSSQL-серверов, зарегистрированных в сети


sniknik   (2004-05-07 17:03:00) [1]

да уж торопливость до хорошего не доводит ;о(
еше посмотрел еще исправление
Serv:=CreateOleObject('SQLDMO.SQLServer');
о то дальнейшее
Serv:= null; безсмысленно.

> Спасибо за пример (хоть и запоздалый).
ну вот еще, все дела бросай и примеры пиши, вовремя. нет, как получилось так получилось.


kas   (2004-05-07 16:54:00) [2]

Спасибо за пример (хоть и запоздалый).
Но тем же самым макаром я выяснял наличие SQLDMO,
после чего был ...см. пункт [10].

ну ежли вы так уверены, я еще разок проверю....


sniknik   (2004-05-07 16:52:00) [3]

функцию можно немного "поправить", а то будет ругатся при отсутствии (не проверяя положил).

так лутше
 function GetDmoPresents: string;
 var Serv: variant;
 begin
   result:= 'нет dmo, списка mssql серверов не будет';
   try
     CreateOleObject('SQLDMO.SQLServer');
     result:= 'есть dmo, список mssql серверов присутствует';
     Serv:= null;
   except {NOTHING} end;
 end;


sniknik   (2004-05-07 16:36:00) [4]

> проверял... справляется.... так что не гарантируй...
значит он там есть. сделай проверку на сам DMO.

если затрудняешся

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComObj, ADODB;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

function GetDmoPresents: string;

 var Serv: variant;
 begin
   result:= 'нет dmo, списка mssql серверов не будет';
   try
     CreateOleObject('SQLDMO.SQLServer');
     result:= 'есть dmo, список mssql серверов присутствует';
   finally
     Serv:= null;
   end;
 end;

begin
 MessageBox(0, PChar(GetDmoPresents), 'DMO message', MB_OK);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 PromptDataSource(Handle , 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False');
end;

end.

dfm

object Form1: TForm1
 Left = 551
 Top = 212
 Width = 215
 Height = 159
 Caption = 'Form1'
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 16
   Top = 24
   Width = 161
   Height = 25
   Caption = 'Test DMO'
   TabOrder = 0
   OnClick = Button1Click
 end
 object Button2: TButton
   Left = 16
   Top = 64
   Width = 161
   Height = 25
   Caption = 'PromptDataSource'
   TabOrder = 1
   OnClick = Button2Click
 end
end


Курдль   (2004-05-07 16:00:00) [5]

Да нафиг в почту - он короткий:
function TfrmLogin.FillAliasList(AItems: TStrings): Boolean;
const
 cODBCPath = '\Software\ODBC\ODBC.INI\ODBC Data Sources';
var
 Reg: TRegistry;
begin
 Reg := TRegistry.Create;
 try
   Reg.RootKey := HKEY_CURRENT_USER;
   if not Reg.OpenKey(cODBCPath, False) then
     Application.MessageBox('Îøèáêà ïðè îòêðûòèè ðååñòðà', 'Îøèáêà', MB_ICONSTOP)
   else Reg.GetValueNames(AItems);
 finally
   Reg.Free;
 end;
end;


Kas   (2004-05-07 15:58:00) [6]

скинь в почту. будет интересно...


Курдль   (2004-05-07 15:56:00) [7]

Могу дать фрагмент кода, как искать все сервера, зарегистрированные в ODBC.


Kas   (2004-05-07 15:48:00) [8]

>Проверь на машине где гарантированно нет SQL DMO, получиш пустой список, гарантирую.

Я проверял... справляется.... так что не гарантируй...


sniknik   (2004-05-07 15:35:00) [9]

> ADOConnection как-то с этим справляется.
проверь на машине где гарантированно нет SQL DMO, получиш пустой список, гарантирую.


kas   (2004-05-07 15:09:00) [10]

вот ADOConnection как-то с этим справляется.... и неплохо справляется... вот только как?... и MS SQL на станции необязателен... и SQL DMO не присутствует....


SergeyV   (2004-05-07 11:53:00) [11]

способ с sql.ru хороший вот только медленный, запустилось приложение и ждешь обновления окна коннектов :(


Reindeer Moss Eater   (2004-05-07 09:51:00) [12]

Если есть диапазон адресов и номер порта,

Я бы сказал номера портов


Erik   (2004-05-07 09:49:00) [13]

Если есть диапазон адресов и номер порта, то можно проскарировать их и проанализировать ответ. Незнаю точно что надо посылать MsSQL серверу, но можно посмотреть снифером. Тогда послать туже строку всему диапазону методом перебора.


Reindeer Moss Eater   (2004-05-07 09:46:00) [14]

Все это очень частные случаи.
АD может и не быть.
А NetServerEnum не всегда видит все сервера даже в пределах до ближайшего маршрутизатора. О других сетях, за маршрутизаторами, в которых могут находиться рабочие и запущенные сервера я вообще не говорю.


freeman82   (2004-05-07 09:43:00) [15]

NetServerEnum


paul_k   (2004-05-07 09:41:00) [16]

Через запрос к Active Directory


Reindeer Moss Eater   (2004-05-07 09:34:00) [17]

MSSQL сервера не регистрируются в сети.
Они регистрируются на конкретной машине с установленным клиентом MSSQL.
Список серверов клиент помещает в реестр. Там их и ищи.


kas   (2004-05-07 09:23:00) [18]

а без SQL DMO?... хотелось бы...


Nikolay M.   (2004-05-06 16:26:00) [19]

Яндексом пользоваться разучился?
http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=7068


Наверх

Титульная страница Поиск, карта сайта Написать письмо