![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить список 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