如何通过Power Query中的AdoDotNet Connector连接到持久化的ADODB记录集?

时间:2019-06-16 22:16:10

标签: ado.net adodb powerquery

我有VBA代码,可将(经典COM)ADODB记录集作为XML持久化到磁盘。 我想将该记录集作为表格加载到Excel powerquery(AKA Get Transform)中。我希望可以通过powerquery的AdoDotNet.DataSource函数来这样做,但我只会收到一个错误。我怀疑我的连接字符串需要调整。

我之所以要这样做,是因为我将数据加载到powerpivot模型中,然后需要列出所有维度上每个层次结构的唯一成员的列表。

方法1使用M List.Distinct函数在每列上获取每个表的不同项目是可能的,虽然解决了一段时间,但以所需格式获得结果的方法却很严格慢。

方法2在powerpivot之后的嵌入式SSAS服务器上使用DVM模式查询。它正是我想要的信息。通过M Xml.Tables函数加载表要好得多,但我仍然必须手动处理函数输出中的数据,并且可能无法在所有情况下都可靠地重新创建它。我认为MSPersist提供程序将更加可靠。

我听说ADO.Net试图保持与经典COM ADO的兼容性,因此我认为可以通过MSPersist提供程序将遗留的持久记录集加载到ADO.Net中。

我也尝试过另存为专有的.adtg格式。同样的错误。

AdoDotNet.Query函数会更直接,但是我不知道查询参数(SELECT * FROM TABLE)的表名是什么?

我尝试使用高级DAX或MDX可能会执行的操作,但是请回答如何加载记录集,因为A)我才刚刚开始消化这些语言,B)有时可能只需要加载持久化的记录集!

我通过VBA将记录集另存为:

dim RS as ADODB.Recordset, Cxn as ADODB.Connection
Set Cxn = ThisWorkbook.Model.DataModelConnection.ModelConnection.ADOConnection
Set RS = Cxn.OpenSchema(adSchemaMembers)
RS.Save "C:\TEMP\Persist.xml", ADODB.PersistFormatEnum.adPersistXML

在PowerQuery中,我尝试通过以下方式加载持久记录集

let Table = AdoDotNet.DataSource("System.data.oledb", [Provider="MSPersist", Source="C:\TEMP\Persist.xml"])

我希望powerquery表加载记录集的内容。 相反,我在黄色错误框中得到以下文本:

DataSource.Error: ADO.NET: Multiple-step OLEDB operation generated errors. Check each OLEDB status value, if available. No Work was done.
Details:
    DataSourceKind=AdoDotNet
    DataSourcePath=system.data.oledb/provider=MSPersist;source=C:
Temp\Persist.xml
    Message=ADO.NET: Multiple-step OLEDB operation generated errors. Check each OLEDB status value, if available. No Work was done.
    ErrorCode=-21472177887
    ExceptionType=System.Data.OleDb.OleDbException

0 个答案:

没有答案