![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL Server [D6, MSSQL]
devol © (2003-02-05 16:08:00)Помогите с таким вот вопросиком:
Как можно получить список доступных SQL серверов, и для каждого выбранного сервера список баз данных?
Reindeer Moss Eater (2003-02-20 15:06:00) [1]Речь шла всего лишь о всех доступных.
Твой код их не показывает .
Rashpil (2003-02-20 14:57:00) [2]To Reindeer Moss Eater:
Боюсь, что дальнейший разговор на эту тему (получение ВСЕХ списка серверов в МИРЕ) - это флейм. ;)
Reindeer Moss Eater (2003-02-20 14:55:00) [3]Если он не зарегистрирован в клиенте конечно
Reindeer Moss Eater (2003-02-20 14:52:00) [4]Rashpil (20.02.03 14:51)
Попоробуй найти работающий сервер (реально доступный тебе), стоящий за маршрутизатором.
Reindeer Moss Eater (2003-02-20 14:51:00) [5]Для NT тоже.
Rashpil (2003-02-20 14:51:00) [6]У меня, кстати, строит список доступных SQL серверов.
Rashpil (2003-02-20 14:49:00) [7]Извините, что без комментариев, но там помоему и так все ясно.
Есстественно будет работать только на NT, W2K или XP.
Для Win98 или WinME получить список серверов НЕРЕАЛЬНО.
Reindeer Moss Eater (2003-02-20 14:39:00) [8]И этот пример не строит список доступных SQL серверов
Rashpil (2003-02-20 14:37:00) [9]procedure GetServerNames(ServerList: TStrings);
var
res: DWORD;
x: pSIArr;
xsize: Cardinal;
readcnt, allcnt: DWORD;
NetServerEnum: TNetServerEnum;
hNetApi32: THandle;
i: Integer;
begin
hNetApi32 := LoadLibrary("netapi32.dll");
if hNetApi32 = 0 then
begin
raise EInvalidImage.CreateFmt("Unable to load netapi32.dll", []);
Exit;
end;
xsize := SizeOf(TServerInfo100) * 128;
@NetServerEnum := GetProcAddress(hNetApi32, "NetServerEnum");
if @NetServerEnum = nil then
begin
if hNetApi32 <> 0 then
FreeLibrary(hNetApi32);
Exit;
end;
res := NetServerEnum(nil, 100, @x, xsize,
@readcnt, @allcnt, $00000004, nil, 0);
if res = 0 then
begin
with ServerList do
begin
BeginUpdate;
Clear;
for i := 0 to readcnt - 1 do
Add(WideCharToString(x^[i].sv100_name));
EndUpdate;
end;
end;
if hNetApi32 <> 0 then
FreeLibrary(hNetApi32);
end;
Reindeer Moss Eater (2003-02-06 08:33:00) [10]Пример, приведенный Alex-A, не строит список доступных SQL серверов
Alex-A (2003-02-06 07:47:00) [11]Используя SQLDMO
procedure GetServerList(Strings: TStrings);
var dmo:OleVariant;
i:Integer;
begin
// Очистка списка серверов
Strings.Clear;
try
// Создание объекта SQL-DMO
dmo:=CreateOleObject("SQLDMO.SQLServer");
dmo:=dmo.Application;
// получение списка серверов
dmo:=dmo.ListAvailableSQLServers;
for i:=1 to dmo.Count do
// Если сервера еще нет в списке, то добавить его
if (Length(trim(dmo.Item(i))) > 0) and (CompareText(dmo.Item(i),"(LOCAL)")<>0)
then Strings.Add(AnsiUpperCase(dmo.Item(i)));
except
end;
end;
Ну а список баз данных - подключайся к каждому серверу и sp_databases
Reindeer Moss Eater (2003-02-05 16:30:00) [12]Если кратко и по делу, то нельзя получить список всех доступных серверов.
jocko (2003-02-05 16:28:00) [13]тебе поможет Client Network Utility из состав пакета MS SQL
а на счет структуры почитай интересно...
http://www.olap.ru/desc/microsoft/borland_ado.asp
а еще просто через ADOConnection.OpenSchema кажется можно, но понадобится описалово, поищи в окрестности той же ссылки.
Reindeer Moss Eater (2003-02-05 16:26:00) [14]Вот почитай внимательно:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1043072138&n=1
devol (2003-02-05 16:18:00) [15]Да, но в этой ветке есть только сервера, к которым уже есть подключение через ихнии клиенты. К примеру у меня есть возможность подключиться к 3 серверам на разных машинах, но в этой ветке реестра прописан только один сервер, клиент которого установлен у меня на машине.
А мне надо список всех доступных серверов.
jocko (2003-02-05 16:14:00) [16]HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\ConnectTo
Reindeer Moss Eater (2003-02-05 16:14:00) [17]Полистай архив форума. Там есть любопытные мысли на сей счет.