У меня есть 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