Excel VBA SQL - 多个数据源

时间:2015-06-04 15:30:36

标签: sql excel-vba vba excel

我有一个相当简单的问题,我无法找到答案。

我有以下SQL: -

Select a from filea where a in (select b from fileb)

我正在尝试使用VBA在Excel中运行它。

我遇到的问题是filea是AS / 400上的表,fileb是Excel电子表格中的表。也就是说,两个不同的数据源。 我无法找到一种方法将两个数据源合并到一个SQL语句中。

任何人都有任何好主意。

1 个答案:

答案 0 :(得分:2)

下面的示例演示如何在单个SQL查询中从两个excel工作簿中获取数据(因为我没有任何AS / 400数据源),并将结果记录集放到工作表中。代码放在Letter, Value A, 1 A, 2 A, 3 ... B, 2 B, 3 B, 4 ... ... E, 5 E, 6 E, 7

Query.xlsm

此外,有两个工作簿作为Option Explicit Sub SqlWhereInTest() Dim strConnection As String Dim strQuery As String Dim objConnection As Object Dim objRecordSet As Object strConnection = _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "User ID=Admin;" & _ "Data Source='" & ThisWorkbook.FullName & "';" & _ "Mode=Read;" & _ "Extended Properties=""Excel 12.0 Macro;"";" strQuery = _ "SELECT * FROM [Sheet1$] " & _ "IN '" & ThisWorkbook.Path & "\Src1.xlsx' " & _ "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _ "WHERE Country IN " & _ "(SELECT CountryFilter FROM [Sheet1$] " & _ "IN '" & ThisWorkbook.Path & "\Src2.xlsx' " & _ "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'])" Set objConnection = CreateObject("ADODB.Connection") objConnection.Open strConnection Set objRecordSet = objConnection.Execute(strQuery) RecordSetToWorksheet Sheets(1), objRecordSet objConnection.Close End Sub Sub RecordSetToWorksheet(objSheet As Worksheet, objRecordSet As Object) Dim i As Long With objSheet .Cells.Delete For i = 1 To objRecordSet.Fields.Count .Cells(1, i).Value = objRecordSet.Fields(i - 1).Name Next .Cells(2, 1).CopyFromRecordset objRecordSet .Cells.Columns.AutoFit End With End Sub 所在文件夹中的数据源。

Query.xlsm包含Customers

src1

Src1.xlsx

src2

生成的工作表如下:

result

它适用于我的64位版Excel 2013。要使其与Src2.xlsx和Excel 2003(未安装提供程序.xls)兼容,您必须将ACE.OLEDB.12.0替换为Provider=Microsoft.ACE.OLEDB.12.0;,并将其替换为扩展属性{{ 1}} / Provider=Microsoft.Jet.OLEDB.4.0;Excel 12.0 Macro;。实际上,连接对象的数据源不仅限于Excel 12.0;文件(请参阅Excel 8.0;中的Query.xlsm部分),代码放在其中。它可能是另一个数据源,与一个数据源兼容可用的提供程序,基于文件或基于服务器。在http://www.connectionstrings.com/

上查找数据源的更多连接字符串