Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Delphi и MS SQL Server


Автор: nova5 10.5.2004, 23:02
У меня есть форма, на ней ADOConnection и всё остальное. Подскажите пожалуйста, как узнать именя всех серверов, к которым можно приконектиться.

Автор: x77 10.5.2004, 23:18
никак, по определению. как узнать имена всех компьютеров в интернет? а ведь если них стоит mssql-сервак, к ним ко всем можно подконнектиться (утрирую, конечно, но смысл такой).

узнать можно, например, все зарегестрированные ODBC-источники и отобрать из них все mssql-евские. (Session.GetAliasNames); узнать можно все алиасы, прописанные Microsoft SQL Server\Network Client Utility (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo).

и т.д.

конкретизируйте задачу.

Автор: nova5 11.5.2004, 07:35
to x77
У меня есть база работающая у меня дома, на моём локальном серваке. Нужно сделать так, чтобы не приходилось каждый раз лезть в исходники и править connection string, когда меняешь место её работы, т.е. ставишь на другие серваки (тоже локальные). Условие: база на всех серваках существует.

Автор: x77 11.5.2004, 07:44
nova5, если подключение не удалось: выводи стандартный диалог с предложением ввести путь к базе, и подключайся снова.

Автор: nova5 11.5.2004, 16:40
x77, ну это можно сделать, но хотелось бы автоматизировать процесс и, например, в ComboBox'е выводить все серваки, пусть выбирают и коннектяться. Вот в чём вопрос, как такое сделать!?

Автор: Петрович 12.5.2004, 09:19
Можно легко получить список доступных в ЛОКАЛЬНОЙ сети MS-SQL серверов.
См. функцию NetServerEnum но она только под WinNT,Win2000,WinXP. Если под Win9x, то надо сначала получить список компьютеров в сети с помощью WNetOpenEnum,WNetEnumResource,WNetCloseEnum. А затем для каждого дернуть NetServerGetInfo дабы узнать, работает-ли на нем MS-SQL-сервер.
Если надо подробнее, могу выложить код, по крайней мере под WinNT.

Автор: nova5 12.5.2004, 10:51
Петрович , очень хотелось бы посмотреть код, хотя бы под NT. Заранее спасибо.

Автор: Петрович 5.7.2004, 09:16
Цитата
Петрович , очень хотелось бы посмотреть код, хотя бы под NT. Заранее спасибо.

Сори, забыл включить подписку на тему.
Вот, может уже и не нужно, но выкладываю:
Код

procedure NetEnumServers(aList :tStrings; ServersType :Cardinal =SV_TYPE_ALL);
// Заполняет aList списком серверов обнаруженных в сети, соответствующего типа.
// Только под WinNT.
// Ex: EWNetError
var
 pBuf :Pointer;
 Count, TotalEntries, ResumeHandle :Cardinal;
 Res :NET_API_STATUS;
 pEntry :PServerInfo101;
begin
 { TODO : Для Win9x наверное надо NetGetListComputers(aList) и далее NetServerGetInfo }
 pBuf := nil;
 ResumeHandle := 0;
 aList.BeginUpdate;
 aList.Clear;
 try
   Res := NetServerEnum (Nil
                   ,101,pBuf,MAX_PREFERRED_LENGTH
                   ,Count,TotalEntries
                   ,ServersType
                   ,nil,@ResumeHandle);
   if  not (Res in [NERR_Success,ERROR_MORE_DATA])  then
     raise EWNetErrorCreate(Res, 'Error NetServerEnum');

   if  pBuf <> nil  then begin
     pEntry := pBuf;
     while  Count > 0  do begin
       with  pEntry^  do
         aList.Add(sv101_name
//             +', Platform: ' +ServerPlatformIdToStr(sv101_platform_id)
//                             +' v'+IntToStr(sv101_version_major)+'.'+IntToStr(sv101_version_minor)
//             +', Type:'      +ServerTypeToStr(sv101_type)
//             +', Comment:'   +q2(sv101_comment)
            );
       Inc(pEntry);
       Dec(Count);
     end; //while

//      if  Res = ERROR_MORE_DATA  then
//        Log('More entries available!!!|Total entries: '+IntToStr(TotalEntries));
   end; //if  pBuf <> nil  

 finally
   aList.EndUpdate;
   if pBuf <> nil  then  NetApiBufferFree(pBuf);
 end;
end;


Закомментированны строки использованные при отладке.
Соответственно, получение списка именно MS-SQL-серверов будет выглядеть так:
Код
procedure NetGetListSQLServers  (aList :tStrings);
begin
 NetEnumServers(aList,SV_TYPE_SQLSERVER);
end;


Если будет интересно, могу и под Win9x выложить.

Автор: uranpro 25.7.2008, 17:35
Петрович, не могу разобраться((( delphi дает ошибки !( 
Код

[Error] Unit1.pas(25): Undeclared identifier: 'SV_TYPE_ALL'
[Error] Unit1.pas(32): Undeclared identifier: 'NET_API_STATUS'
[Error] Unit1.pas(33): Undeclared identifier: 'PServerInfo101'
[Error] Unit1.pas(41): Undeclared identifier: 'NetServerEnum'
[Error] Unit1.pas(42): Undeclared identifier: 'MAX_PREFERRED_LENGTH'
[Error] Unit1.pas(46): Undeclared identifier: 'NERR_Success'
[Error] Unit1.pas(47): Undeclared identifier: 'EWNetErrorCreate'
[Error] Unit1.pas(51): Pointer type required
[Error] Unit1.pas(52): Undeclared identifier: 'sv101_name'
[Error] Unit1.pas(66): Undeclared identifier: 'NetApiBufferFree'


Добавлено через 1 минуту и 2 секунды
 smile 

Автор: Akella 26.7.2008, 07:54
uranpro, посмотри на дату этой темы smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)