VBA ADOの次のSQLは、「From句に構文エラーがあります。Excel VBA ADO SQL - From句の構文エラー
Sub RunSQL2()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim ws As Worksheet
Dim strRangeAddress As String
Dim dataRange As Range
strFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
Set ws = ThisWorkbook.Sheets("mydata")
strRangeAddress = ActiveSheet.Name & "$" & ws.Range("A1:C30020").Address(False, False)
strSQL = strSQL & " (select s.* from "
strSQL = strSQL & " (select t.*, row_number() over (partition by child_level order by child_index,child_level) [rownum] from [" & strRangeAddress & "] t) s "
strSQL = strSQL & " where [rownum] = 1) u "
strSQL = strSQL & " join (select t2.*, 1 as [rownum] from [" & strRangeAddress & "] t2) v "
strSQL = strSQL & " on (v.parent_level = u.child_level and v.[rownum] = u.[rownum]) "
strSQL = strSQL & " union select w.child_index,w.child_level,w.child_level,w.child_index "
strSQL = strSQL & " from [" & strRangeAddress & "] w "
strSQL = strSQL & " where w.child_index = 1 "
strSQL = strSQL & " order by v.child_index;"
rs.Open strSQL, cn
Debug.Print rs.GetString
End Sub
ます。strSQLののDebug.Printは、次のとおりです。
select v.child_index,v.child_level,v.parent_level,u.child_index as parent_index
from
(select s.*
from
(select t.*, row_number() over (partition by child_level order by child_index,child_level) [rownum]
from [mydata$A1:C30020] t
) s
where [rownum] = 1
) u
join
(select t2.*, 1 as [rownum]
from [mydata$A1:C30020] t2
) v on (v.parent_level = u.child_level and v.[rownum] = u.[rownum])
union
select w.child_index,w.child_level,w.child_level,w.child_index
from [mydata$A1:C30020] w
where w.child_index = 1
order by v.child_index;
私はシンプルます。strSQL列接続工事と戻り結果を使用する場合。これは動作します:
strSQL = "SELECT * FROM [" & strRangeAddress & "]"
私は正しい構文があると思います。互換性のないSQLからエラーが発生する可能性はありますか?例えば、ADOは 'Partition by'を行うことができますか?
私はExcel 2010 64ビットオフィスを使用しています。
全く理解できない。レビューが承認されたら、クエリが再度正しいかどうか確認してください。後で問題をよく見てください –
** Proのヒント**: 'strSQL = strSQL&'を使用してこのような長くて複雑なクエリを作成する場合、各行の最後に '&vbcrlf'を追加してくださいあなたが 'debug.print strSQL'を実行したときにクエリーが理解できるようになります –
Excelワークブックへの接続に使用するJet/ACE SQLエンジンは、その方言のウィンドウ関数をサポートしていないので、' RowNumber() '、' Over () '、' Partition'などがあります。 – Parfait