【问题标题】:Excel SQL VBA: adding more than one cmd parameterExcel SQL VBA:添加多个 cmd 参数
【发布时间】:2021-02-23 13:32:30
【问题描述】:

我正在编写 SQL 查询,但字符串值出错:

Dim cn As Object, rs As Object, output As String, sql As String
Dim dt As Date
Dim lne As String
Const adCmdText As Integer = 1, adDate As Integer = 7, adChar As Integer = 8
 
Set cn = CreateObject("ADODB.Connection")
With cn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=" _
                    & ThisWorkbook.FullName & ";" _
                    & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    .Open
End With

With Worksheets("Page 2")
     dt = CDate(Replace(.Cells(i, 2).Value, ".", "-"))
     lne = .Cells(2, 1).Value ' lne = mystr
End With

sql = "SELECT Name, SUM(Worktime) as summa FROM [Page 1$] WHERE DateTime = ? AND Line = " & lne & " GROUP BY Name"
Set cmd = CreateObject("ADODB.Command")

With cmd
    .ActiveConnection = cn
    .CommandText = sql
    .CommandType = adCmdText
    
    .Parameters.Append .CreateParameter("dt", adDate, 1, , dt)
    
    Set rs = .Execute ' ERROR: One or more required parameters are missing a value.
End With

我尝试添加多个 cmd 参数来解决这个问题:

sql = "SELECT Name, SUM(Worktime) as summa FROM [Page 1$] WHERE DateTime = ? AND Line = ? GROUP BY Name"

Set cmd = CreateObject("ADODB.Command")

With cmd
    .ActiveConnection = cn
    .CommandText = sql
    .CommandType = adCmdText
    
    .Parameters.Append .CreateParameter("dt", adDate, 1, , dt)
    
    .Parameters.Append .CreateParameter("lne", adChar, 2, , lne)
    
    Set rs = .Execute
End With

但我也得到一个错误。如何设置多个 cmd 参数并在查询中使用它?

我正在使用的表:here

【问题讨论】:

  • 对于第二个代码块,你说但我也得到一个错误。这是同一个错误吗?如果没有,请发布它的消息。

标签: sql excel vba adodb


【解决方案1】:

CreateParameter的参数是

command.CreateParameter (Name, Type, Direction, Size, Value) 

Direction - 所有参数的参数都应为 adParamInput(即 1)

我的经验是,对于一个字符串参数(adChar),需要提供大小(字符串的长度)。

试试

.Parameters.Append .CreateParameter("lne", adChar, adParamInput, len(lne), lne)

【讨论】:

  • 需要注意的是,字符串的大小受数据库中的 FieldSize 限制。如果len(lne) > max_field_size 会报错。
  • @MG92:使用 SQL server 和 Oracle 没有问题,我怀疑使用 Excel 作为数据库会出现问题。当然,在 Insert 或 Update 语句中使用参数时会报错。
  • 我们在使用 Access-DB 时遇到了一些问题。当使用 varchar(32) 初始化字段并添加大小大于 32 的参数时,我们收到错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多