Excel VBA - 使用Workfsheet单元格范围运行SQL查询
我正在创建一个简单的电子表格,它从工作表“输入”中获取一个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的需要是逗号分隔
InputIDs = getIDs(表( “输入”)范围( “A2:A10”))
Function getIDs(rng As Range)
Dim c As Range
Dim s As String
For Each c In rng
s = s & c.Value & ","
Next
getIDs = Left(s, Len(s) - 1)
End Function
这工作一种享受,谢谢托马斯。我确实怀疑我是否试图错误地创建一个数组,因为它跨越了我的想法,每个ID之间可能没有分隔符,但是我缺乏VBA知识阻碍了我。 – mhammonde
我经常陷入困境,试图以正确的方式做事,最终我错过了简单的方法。 – 2016-07-07 09:04:37
你不能传递一个变量数组作为查询的参数。你需要它是一个由逗号分隔的id的字符串。 – Kyle
谢谢凯尔,托马斯沿着你的回应下面帮我解决我的问题。直到你解释我没有意识到变体数组不包含逗号分隔符。 – mhammonde