VBA Список всех кубов на сервере анализа SQL - PullRequest
0 голосов
/ 31 января 2020

У меня есть 2 сервера, которые SQL Серверы анализа серверов. На этих двух серверах находятся базы данных, которые пользователи выбирают в зависимости от того, какой куб они хотят видеть в своей книге.

Мне нужно создать пользовательскую форму, которая (1) позволяет пользователю выбрать 1 из 2 серверов, а (2) показывает раскрывающийся список каждой из доступных баз данных на сервере, выбранном в (1).

Я создал функциональность для (1) и разработал форматирование для (2), но я не могу понять, как получить список доступных баз данных.

Я думаю, что в vba нужно выполнить следующие шаги: подключиться к указанному серверу, а затем выполнить запрос «Выбрать ... из ...», чтобы получить имя каждой базы данных.

Соединение - OLEDB, и пример строки соединения:

.OLEDBConnection.Connection = Array( _
    "OLEDB;Provider=MSOLAP.8;Integrated Security=SSPI;Persist Security Info=True;
      Initial Catalog=" & **database** & "; Data Source=" & **server** & _
    ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2")

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

Я посмотрел этот пост Используя VBA в Excel, как мне получить имена всех кубов OLAP на сервере? , но я не могу манипулировать им для своих целей.

Спасибо за любую помощь!

* ОБНОВЛЕНИЕ * Мне удалось заставить его работать со следующим кодом:

Dim conn As ADODB.Connection
Dim sConnString As String
sConnString = "Provider=MSOLAP.8;Integrated Security=SSPI;Persist Security Info=True;Data Source=" & Cube_Server_Options.Value & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
Set conn = New ADODB.Connection
conn.Open sConnString


Set rst = New ADODB.Recordset
Set rst.ActiveConnection = conn
rst.Source = "SELECT [catalog_name] FROM $system.DBSCHEMA_CATALOGS"
rst.Open
Do While Not rst.EOF

  rst.MoveNext
Loop
rst.Close

Set conn = Nothing
Set rst = Nothing

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Если вы хотите сделать это в C#, это довольно просто и дает вам дополнительные атрибуты. Кроме того, вы можете перечислить и даже обработать измерения и меры куба с помощью этого.

        using Microsoft.AnalysisServices;


        Server server = new Server();
        server.Connect(@"Data source=" + servername + "; Timeout=7200000;Integrated Security=SSPI");

        IEnumerable<Database> result = from Database item in server.Databases select item;

        foreach (Database cube in result)
        {
            Console.WriteLine(cube.Name);
        }
0 голосов
/ 01 февраля 2020
Dim conn As ADODB.Connection
Dim sConnString As String
sConnString = "Provider=MSOLAP.8;Integrated Security=SSPI;Persist Security Info=True;Data Source=" & Cube_Server_Options.Value & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
Set conn = New ADODB.Connection
conn.Open sConnString


Set rst = New ADODB.Recordset
Set rst.ActiveConnection = conn
rst.Source = "SELECT [catalog_name] FROM $system.DBSCHEMA_CATALOGS"
rst.Open
Do While Not rst.EOF

  rst.MoveNext
Loop
rst.Close

Set conn = Nothing
Set rst = Nothing

Обратите внимание, эта строка подключения была указана c для моего примера, но логика c для подключения к серверу и l oop через базы данных работали

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...