VBA 프로그램에서 SQL UPDATE 쿼리를 구성하려고합니다.VBA ADO 쿼리에서 OPENROWSET
기본적으로 현재 통합 문서의 테이블을 닫힌 통합 문서의 테이블에서 업데이트합니다. 이 원본 통합 문서는 .xls 파일 인 경우에만 아래의 쿼리를 사용하여 좋은 작품 :
내가/같은 공급자를 사용하여 소스에 연결하려는 소스 파일로 .XLSX 파일을 사용하기 위해Sub UPDATEQUERY(SourcePath As String, SourceSheet As String, TargetSheet As String, _
Columns As String, Filter As String)
Dim Cn As ADODB.Connection
Dim QUERY_SQL As String
Dim CHAINE_HDR As String
Dim STRCONNECTION As String
CHAINE_HDR = "[Excel 8.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=1;Extended Properties='HDR=YES;'] "
Set Cn = New ADODB.Connection
QUERY_SQL = _
"UPDATE [" & TargetSheet & "$] INNER JOIN (SELECT * FROM [" & SourceSheet & "$] " & _
"IN '" & SourcePath & "' " & CHAINE_HDR & ") t2 " & _
"ON [" & TargetSheet & "$].id = t2.id " & _
"SET [" & TargetSheet & "$].ColA = t2.ColA "
STRCONNECTION = _
"Driver={Microsoft Excel Driver (*.xls)};" & _
"DriverId=790;" & _
"Dbq=" & ThisWorkbook.FullName & ";" & _
"DefaultDir=" & ThisWorkbook.FullName & ";ReadOnly=False;"
Cn.Open STRCONNECTION
Cn.Execute (QUERY_SQL)
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub
드라이버를 사용하여 현재 wb (Microsoft.ACE.OLEDB.12.0 대신 MSDASQL.1)에 연결합니다. 실제로 'CHAINE_HDR'을 Excel 12.0
으로 설정하면 "ISAM 드라이버를 찾을 수 없습니다"라는 메시지가 나타납니다.
Sub UPDATEQUERY(SourcePath As String, SourceSheet As String, TargetSheet As String, _
Columns As String, Filter As String)
Dim Cn As ADODB.Connection
Dim QUERY_SQL As String
Dim STRCONNECTION As String
Dim STRCONNECTION_SOURCE As String
STRCONNECTION_SOURCE = _
"'MSDASQL.1'," & _
"'Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=" & SourcePath & ";'," & _
"'SELECT * FROM [Data$]'"
Set Cn = New ADODB.Connection
QUERY_SQL = _
"UPDATE [" & TargetSheet & "$] INNER JOIN (SELECT * FROM OPENROWSET(" & STRCONNECTION_SOURCE & ")) t2 " & _
"ON [" & TargetSheet & "$].id = t2.id " & _
"SET [" & TargetSheet & "$].ColA = t2.ColA "
STRCONNECTION = _
"Driver={Microsoft Excel Driver (*.xls)};" & _
"DriverId=790;" & _
"Dbq=" & ThisWorkbook.FullName & ";" & _
"DefaultDir=" & ThisWorkbook.FullName & ";ReadOnly=False;"
Cn.Open STRCONNECTION
Cn.Execute (QUERY_SQL)
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub
그러나 나는 "절에서 Synthax 오류"는
를 얻을. SQL 쿼리를 올바르게 설정하는 방법은 무엇입니까?
감사
문제는 내가 당신의 내면은 여전히 내 가입하고 사용하는 경우입니다 : 모든 Windows 시스템에 관계없이 MSACCESS.EXE 응용 프로그램의) 설치 여부, 당신은 엑셀 매개 변수를 지정할 필요가 없습니다 것입니다 연결 문자열 (STRCONNECTION) MSDQSL 함께 'ISAM 드라이버를 찾을 수 없습니다.' ACE 대신이 공급자를 사용하는 진정한 이유는 ACE가 "연결된 Excel 스프레드 시트에 있기 때문에이 필드를 편집 할 수 없습니다."라는 오류가 발생하기 때문입니다. 내가 읽은 바로는 ACE를 예전 MSDASQL.1로 대체해야했습니다. 내 연결 문자열이 소스 파일의 'Excel 12.0'과 호환되지 않습니다. {{Microsoft Excel 드라이버 (* .xls, * .xlsx, * .xlsm, * .xlsb)} '를 사용하면 연결된 Excel 스프레드 시트 오류도 발생합니다. – Lich4r
그러면 원래 구문을 그대로 유지하고 버전을 변경하십시오 :'Excel 12.0 Xml;'. 죄송합니다. 통합 문서에서 업데이트 쿼리를 실행하지 않으며 Excel이 데이터베이스가 아니므로 해당 경로를 벗어나지 않으려 고합니다. – Parfait
그런데 ACE는 통합 문서에 연결하는 데 사용되는 엔진이며 OLEDB 공급자 및 ODBC 드라이버는 연결할 수있는 API입니다. 그들은 상호 보완적이고 대체 소프트웨어가 아닙니다.ACE.12.0은 .xlsx 파일에 연결해야합니다. 이전 Jet 4.0은 .xls 파일로 제한되었습니다. – Parfait