MS OLE DB 驱动程序:Power Query 与 ADO
MS OLE DB driver: Power Query vs ADO
我有一个 VBA 脚本调用 SQL 服务器。此脚本首先测试与 SQL 服务器的有效连接,如果有效,则运行 Power Query。
我的 "test connection" 小脚本是这样的:
Function TestSQLConnection()
Dim cnn As ADODB.Connection
TestSQLConn = False
Set cnn = New ADODB.Connection
cnn.Open "Provider=sqloledb;Data Source=myserver;Initial Catalog=MyDB;Integrated Security=SSPI;"
If cnn.State = adStateOpen Then
TestSQLConnection = True
cnn.Close
End If
结束函数
我的 "Power Query" 小脚本是这样的:
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""SomeTable"";Extended Properties=""""" _
, Destination:=Range("$A")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [SomeTable]")
.ListObject.DisplayName = "SomeTable"
.Refresh BackgroundQuery:=False
End With
我的 VBA 脚本以前指向 SQL 2014,它同时具有旧的 sqloledb 驱动程序和新的 msoledbsql 驱动程序。但是现在,我的脚本指向 SQL 2017,它没有 msoledbsql 驱动程序。在此服务器上,"test connection" scriptlet 失败。因此,我在服务器上安装了 msoledbsql,并将 "test" 连接脚本修改为:
cnn.Open "Provider=msoledbsql;Data Source=myserver;Initial Catalog=MyDB;Integrated Security=SSPI;"
现在似乎一切正常。但是,我不明白为什么我不需要修改 Power Query scriptlet 中的任何内容。 Power Query 中的 OLE DB 调用是否只是 "know" 以使用适当的驱动程序?
OLEDB 调用不是 Power Query 用于连接到您的数据库的调用,而是 Excel 用于从 Power Query 正在执行的操作中检索最终结果的调用。您可以在 "Microsoft.Mashup.OleDb" 源代码中看到,它基本上是 Power Query 的后端。使用 Power Queries 自己的 SQL 服务器连接器连接到您的数据库,这可能在不同版本之间工作正常。
我有一个 VBA 脚本调用 SQL 服务器。此脚本首先测试与 SQL 服务器的有效连接,如果有效,则运行 Power Query。
我的 "test connection" 小脚本是这样的:
Function TestSQLConnection()
Dim cnn As ADODB.Connection
TestSQLConn = False
Set cnn = New ADODB.Connection
cnn.Open "Provider=sqloledb;Data Source=myserver;Initial Catalog=MyDB;Integrated Security=SSPI;"
If cnn.State = adStateOpen Then
TestSQLConnection = True
cnn.Close
End If
结束函数
我的 "Power Query" 小脚本是这样的:
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""SomeTable"";Extended Properties=""""" _
, Destination:=Range("$A")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [SomeTable]")
.ListObject.DisplayName = "SomeTable"
.Refresh BackgroundQuery:=False
End With
我的 VBA 脚本以前指向 SQL 2014,它同时具有旧的 sqloledb 驱动程序和新的 msoledbsql 驱动程序。但是现在,我的脚本指向 SQL 2017,它没有 msoledbsql 驱动程序。在此服务器上,"test connection" scriptlet 失败。因此,我在服务器上安装了 msoledbsql,并将 "test" 连接脚本修改为:
cnn.Open "Provider=msoledbsql;Data Source=myserver;Initial Catalog=MyDB;Integrated Security=SSPI;"
现在似乎一切正常。但是,我不明白为什么我不需要修改 Power Query scriptlet 中的任何内容。 Power Query 中的 OLE DB 调用是否只是 "know" 以使用适当的驱动程序?
OLEDB 调用不是 Power Query 用于连接到您的数据库的调用,而是 Excel 用于从 Power Query 正在执行的操作中检索最终结果的调用。您可以在 "Microsoft.Mashup.OleDb" 源代码中看到,它基本上是 Power Query 的后端。使用 Power Queries 自己的 SQL 服务器连接器连接到您的数据库,这可能在不同版本之间工作正常。