[SQL] 어떻게 엑셀 VBA에서 두 개의 서로 다른 데이터 소스에서 생성 된 두 개의 레코드를 가입
SQL어떻게 엑셀 VBA에서 두 개의 서로 다른 데이터 소스에서 생성 된 두 개의 레코드를 가입
내 시나리오입니다 - 나는 1 개 .xls 파일의 데이터 세트와 오라클 데이터베이스 테이블에있는 데이터의 또 다른 세트가있다. 둘 다 다음 조인 (같은 SQL)을 수행 엑셀 VBA를 사용하여 데이터 마지막으로 일부 통합 문서의 데이터 저장을 가져 오기합니다.
문제 - 나는 VBA에서 데이터의 서로 다른 두 세트를 가져온 다음에 가입을 수행하는 방법을 모르겠어요. 닷넷에서 우리가 가져온 데이터를 저장하고 내가이 작업을 수행 할 수있는 방법이 있지만 VBA에 어떤 쿼리를 수행 할 수있는 DataSet 개체가?
해결법
-
==============================
1.ADO를 사용하여 아래의 예를 생각해 보자. 코드는 하나의 SQL 쿼리 (제트 SQL) 내에서 여러 데이터 소스에서 데이터를 얻을 수 있습니다, 특히 .XLSX 파일에서 노동 조합을 만들고, 워크 시트에 넣어 결과 레코드. 오라클 ODBC 드라이버를 통해 (다른 데이터베이스 등) ADO와 오라클에 직접 연결할 수 있지만 불행하게도, 난, 테스트 측은 오라클 데이터 소스를 가지고있다.
ADO를 사용하여 아래의 예를 생각해 보자. 코드는 하나의 SQL 쿼리 (제트 SQL) 내에서 여러 데이터 소스에서 데이터를 얻을 수 있습니다, 특히 .XLSX 파일에서 노동 조합을 만들고, 워크 시트에 넣어 결과 레코드. 오라클 ODBC 드라이버를 통해 (다른 데이터베이스 등) ADO와 오라클에 직접 연결할 수 있지만 불행하게도, 난, 테스트 측은 오라클 데이터 소스를 가지고있다.
코드는 Query.xlsm에 배치됩니다 :
Option Explicit Sub SqlUnionTest() 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 & "\Source1.xlsx' " & _ "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _ "UNION " & _ "SELECT * FROM [Sheet1$] " & _ "IN '" & ThisWorkbook.Path & "\Source2.xlsx' " & _ "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _ "UNION " & _ "SELECT * FROM [Sheet1$] " & _ "IN '" & ThisWorkbook.Path & "\Source3.xlsx' " & _ "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _ "ORDER BY ContactName;" 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
참고 ThisWorkbook.Path 경로 내에서 '포함 할 수 없습니다. 그렇지 않으면 ''와 '대체하여 이스케이프해야합니다.
또한 Query.xlsm과 같은 폴더에 세 개의 데이터 소스 파일이 있습니다.
Source1.xlsx :
Source2.xlsx :
Source3.xlsx :
다음과 같이 결과 워크 시트는 다음과 같습니다
그것은 나를 위해 64 비트 버전의 Excel 2013을 사용할 수 있습니다. .XLS 및 Excel 2003 (공급자 ACE.OLEDB.12.0가 설치되지 않은 경우) 당신이 공급자를 교체해야와 호환되도록하려면 = Microsoft.ACE.OLEDB.12.0; 확장 특성 또한 제공자 = Microsoft.Jet.OLEDB.4.0, 및 엑셀 매크로 12.0; / 엑셀 12.0; 엑셀 8.0 ;. 당신은 쉽게 쿼리에 WHERE 절 및 기타 SQL 물건을 추가 할 수 있습니다. 실제로 연결 개체에 대한 데이터 소스 코드에 배치 유일한 Query.xlsm 파일을 한정되는 것은 아니다. 그것은 가능한 업체 중 하나, 하나의 파일 기반 또는 서버 기반과 호환 다른 데이터 소스를 수 있습니다. http://www.connectionstrings.com/에 데이터 소스에 대한 더 연결 문자열 찾기
from https://stackoverflow.com/questions/34294382/how-to-join-two-recordset-created-from-two-different-data-source-in-excel-vba by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 - 쿼리 단락? (0) | 2020.05.27 |
---|---|
[SQL] 입력 매개 변수의 개수 함수 (0) | 2020.05.27 |
[SQL] 매개 변수를 사용하여 ASP.NET ODBC 쿼리 (0) | 2020.05.27 |
[SQL] SQL에서 지능 목록에 문자열 목록을 변환 (0) | 2020.05.27 |
[SQL] 어떻게 중포 기지 분석 원시 데이터에 세션 및 세션 기간을 계산? (0) | 2020.05.27 |