“HDR =否”时可以使用参数化查询吗?

时间:2017-11-08 12:26:57

标签: excel vba adodb

我正在尝试在Excel工作表上使用VBA / ADODB执行一些SQL查询,我想将参数放入其中。

  • 我知道如何在有标题时输入参数。
  • 我也知道,当“HDR = No”时,会自动分配列标题名称(例如第1列的“F1”)。

所以,我尝试使用这个指定的名称作为参数值,但发生了一些奇怪的事情。

这是我的简化代码(数据在名为“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”)发生了一些事情。

所以我的问题是:我不能使用指定的标题名称执行参数化查询吗?

感谢任何帮助。

0 个答案:

没有答案