【问题标题】:VBA List all Cubes in a SQL Server Analysis ServerVBA 列出 SQL Server 分析服务器中的所有多维数据集
【发布时间】:2020-01-31 19:14:35
【问题描述】:

我有 2 台服务器是 SQL Server 分析服务器。在这两台服务器上是数据库,用户可以根据他们想要在工作簿中使用的多维数据集进行选择。

我需要创建一个用户表单,它 (1) 让用户选择 2 个服务器中的 1 个,并且 (2) 显示在 (1) 中选择的服务器上每个可用数据库的下拉框。

我已经为 (1) 创建了功能并为 (2) 设计了格式,但我不知道如何获取可用数据库的列表。

我认为我需要遵循的步骤是,在 vba 中,连接到指定的服务器,然后执行一些“Select ... From ...”查询以获取每个数据库名称。

连接是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")

服务器由用户指定,数据库将由用户通过我们将创建的下拉框选择。

我查看了这篇帖子 Using VBA in Excel, how do I get the names of all OLAP Cubes on a server?,但我似乎无法为我的目的操纵它。

感谢您的所有帮助!

* 更新 * 我能够让它与以下代码一起工作:

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

【问题讨论】:

  • “但我似乎无法为我的目的操纵它” - 究竟如何?哪个步骤给您带来麻烦,您是否遇到任何错误?在哪里?连接字符串是这里最没用的信息...

标签: excel vba mdx cube olap-cube


【解决方案1】:

如果您想在 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);
        }

【讨论】:

    【解决方案2】:
    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
    

    请注意,此连接字符串特定于我的示例,但连接到服务器并循环访问数据库的逻辑工作正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      相关资源
      最近更新 更多