我正在創建一個簡單的電子表格,它從工作表「輸入」中獲取一個ID數組,查詢Oracle數據庫,只查詢與陣列中ID匹配的記錄並輸出結果到工作表「輸出」。Excel VBA - 使用Workfsheet單元格範圍運行SQL查詢
到目前爲止,我的VBA將工作,如果我的陣列僅包含單個ID(通過指定單個小區範圍),並與一切出現在工作表中「輸出」 Oracle數據庫所需的輸出的完成。美好時光。
我現在遇到的問題是,我想在工作表「輸入」中指定一系列ID(任何高達5000左右的值)以包含在我的數組中,並將該數組傳遞給Oracle數據庫以爲每個數據返回數據它發現的ID(我不期待所有的ID都存在)。每當我試試這個我似乎得到「錯誤13類型不匹配」錯誤...不好的時候。
我的VBA代碼:
Dim OracleConnection As ADODB.Connection
Dim MosaicRecordSet As ADODB.RecordSet
Dim SQLQuery As String
Dim DBConnect As String
Dim count As String
Dim strbody As String
Dim Exclude As String
Dim i As Integer
Dim Rec As RecordSet
Dim InputIDs As Variant
Set OracleConnection = New ADODB.Connection
DBConnect = "Provider=msdaora;Data Source=MOSREP;User ID=***;Password=***;"
OracleConnection.Open DBConnect
' Clear Output Sheet Down
Sheets("Output").Select
Range("A2:F10000").Clear
' Set Input Range
Sheets("Input").Columns("A:A").NumberFormat = "0"
InputIDs = Sheets("Input").Range("A2:A10").Value
' SQL Query
SQLQuery = "select DMP.PERSON_ID, DMP.FULL_NAME, DMP.DATE_OF_BIRTH, DMA.ADDRESS, DMA.ADDRESS_TYPE, DMA.IS_DISPLAY_ADDRESS " & _
"from DM_PERSONS DMP " & _
"join DM_ADDRESSES DMA " & _
"on DMA.PERSON_ID=DMP.PERSON_ID " & _
"where DMP.PERSON_ID in (" & InputIDs & ")"
Set MosaicRecordSet = OracleConnection.Execute(SQLQuery)
Sheets("Output").Range("A2").CopyFromRecordset MosaicRecordSet
' Change DOB Format
Sheets("Output").Columns("C:C").NumberFormat = "dd/mm/yyyy"
' Set Left Alignment
Sheets("Output").Columns("A:Z").HorizontalAlignment = xlHAlignLeft
Range("A1").Select
OracleConnection.Close
Set MosaicRecordSet = Nothing
Set OracleConnection = Nothing
ActiveWorkbook.Save
任何人都可以闡明我缺少的是什麼光?我試圖通過在工作表「輸入」設置列上了「NumberFormat的」爲「0」,以解決該類型不匹配的問題,但沒有幫助。我也認爲我可能必須有一個循環遍歷每條記錄,但我還沒有到那個階段,因爲這種類型不匹配的事情...
謝謝大家提前給予您的幫助!
問候 馬特
你不能傳遞一個變量數組作爲查詢的參數。你需要它是一個由逗號分隔的id的字符串。 – Kyle
謝謝凱爾,托馬斯沿着你的迴應下面幫我解決我的問題。直到你解釋我沒有意識到變體數組不包含逗號分隔符。 – mhammonde