Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Список серевров ms sql

3.2K
21 августа 2009 года
Гудвин
186 / / 22.12.2007
Здравствуйте. Помогите разобраться. Пишу простой интерфейс соединения с мс скл. Нужно вывести список серверов. Использую следующий код:

Код:
procedure ListAvailableSQLServers(Names : TStrings);
var
  RSCon: ADORecordsetConstruction;
  Rowset: IRowset;
  SourcesRowset: ISourcesRowset;
  SourcesRecordset: _Recordset;
  SourcesName, SourcesType: TField;

    function PtCreateADOObject
             (const ClassID: TGUID): IUnknown;
    var
      Status: HResult;
      FPUControlWord: Word;
    begin
      asm
        FNSTCW FPUControlWord
      end;
      Status := CoCreateInstance(
                  CLASS_Recordset,
                  nil,
                  CLSCTX_INPROC_SERVER or
                  CLSCTX_LOCAL_SERVER,
                  IUnknown,
                  Result);
      asm
        FNCLEX
        FLDCW FPUControlWord
      end;
      OleCheck(Status);
    end;
begin
  SourcesRecordset :=
      PtCreateADOObject(CLASS_Recordset)
      as _Recordset;
  RSCon :=
      SourcesRecordset
      as ADORecordsetConstruction;
  SourcesRowset :=
      CreateComObject(ProgIDToClassID('SQLOLEDB Enumerator'))
      as ISourcesRowset;
  OleCheck(SourcesRowset.GetSourcesRowset(
       nil,
       IRowset, 0,
       nil,
       IUnknown(Rowset)));
  RSCon.Rowset := RowSet;
  with TADODataSet.Create(nil) do
  try
    Recordset := SourcesRecordset;
    SourcesName := FieldByName('SOURCES_NAME');
    SourcesType := FieldByName('SOURCES_TYPE');
    Names.BeginUpdate;
    try
      while not EOF do
      begin
        if
           (SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE)
           and (SourcesName.AsString <> '') then
          Names.Add(SourcesName.AsString);
        Next;
      end;
    finally
      Names.EndUpdate;
    end;
  finally
    Free;
  end;
end;

procedure DatabasesOnServer(Databases : TStrings;ConnStr:string);
var
  rs : _RecordSet;
begin
  Databases.Clear;
  with TAdoConnection.Create(nil) do
  try
    //simple ConnectionString without the DB name
    ConnectionString := ConnStr;
    LoginPrompt := False;
    try
      Open;
      rs := ConnectionObject.OpenSchema(
                adSchemaCatalogs,
                EmptyParam,
                EmptyParam);
      with rs do
      begin
        try
          Databases.BeginUpdate;
          while not Eof do
          begin
            Databases.Add(
                VarToStr(
                   Fields['CATALOG_NAME'].Value));
            MoveNext;
          end;
        finally
          Databases.EndUpdate;
        end;
      end;
      Close;
    except
      on e:exception do
        MessageDlg(e.Message,mtError, [mbOK],0);
    end;
  finally
    Free;
  end;
end;


Но при открытии комбобокса список серверов пуст. Сервер ставил 2000 и с 2005 пробовал. На другой машине все работает, но мне нужно протестировать на этой. в чем может быть причина?:confused:
3.2K
21 августа 2009 года
Гудвин
186 / / 22.12.2007
в общем без понятия, нашёл компромисс - вручную название сервера вводить. соединение работает.:)
303
21 августа 2009 года
makbeth
1.0K / / 25.11.2004
Таки гугл поможет отцу русской демократии ;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог