我正在尝试在Excel工作表上使用VBA / ADODB执行一些SQL查询,我想将参数放入其中。
所以,我尝试使用这个指定的名称作为参数值,但发生了一些奇怪的事情。
这是我的简化代码(数据在名为“data”的工作表上):
Dim objCn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim objRs As New ADODB.Recordset
Dim param As ADODB.Parameter
Dim strSQL As String
With objCn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0;HDR=No"
.Open ThisWorkbook.Path & "\" & ThisWorkbook.Name
End With
strSQL = ""
strSQL = strSQL & " SELECT F1, ? FROM [data$]"
Set cmd.ActiveConnection = objCn
With cmd
.CommandText = strSQL
.CommandType = adCmdText
.Prepared = True
End With
Set param = New ADODB.Parameter
Set param = cmd.CreateParameter("param1", adVarChar, adParamInput, 10)
cmd.Parameters.Append param
cmd.Parameters("param1") = "F2"
Set objRs = New ADODB.Recordset
Set objRs = cmd.Execute
With ThisWorkbook.Worksheets("Sheet1")
.Range("A2").CopyFromRecordset objRs
End With
Set cmd = Nothing
objRs.Close: Set objRs = Nothing
objCn.Close: Set objCn = Nothing
结果是这样的(在“Sheet1”上):
| A | B
1 | |
2 | apple | F2
3 | banana | F2
4 | orange | F2
我没有收到任何错误,但正如您所看到的,第2列(“F2”)发生了一些事情。
所以我的问题是:我不能使用指定的标题名称执行参数化查询吗?
感谢任何帮助。