【问题标题】:VBA to SQL stored procedure parameter formatting issueVBA 到 SQL 存储过程参数格式问题
【发布时间】:2021-05-13 21:43:10
【问题描述】:

谁能帮我解决这个问题?

我正在尝试使用存储过程中的变量来过滤 Excel 宏中的另一个存储过程,但变量值没有传递给第二个存储过程。

这是我目前尝试过的代码:

Set rs = New ADODB.Recordset
Set rs = conn.Execute("[dbo].[ufnSectorLevel] 3 ")
rs.MoveFirst

Do Until rs.EOF

GetSector = rs.Fields(0).Value

qry = "[dbo].[ufnDemographicAgeSector] '" & GetSector & "'"

Set rs1 = New ADODB.Recordset
Set rs1 = conn.Execute(qry)

我也试过了,但结果是一样的。

Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "ufnDemographicAgeSector"

cmd.Parameters.Append cmd.CreateParameter("@Sector", adVarChar, adParamInput, 60, GetSector)
cmd.Execute

如果我这样做,存储过程将按我的意愿工作。

GetSector = "Acute Corporate"

或者如果我像这样直接将文本输入到参数中。

cmd.Parameters.Append cmd.CreateParameter("@Sector", adVarChar, adParamInput, 60, "Acute Corporate")

我也围绕变量和字段值尝试了 chr(39),但在存储过程 #2 中没有触发过滤器。

有没有人知道我可以尝试的其他方法?

【问题讨论】:

  • 在你的第一个例子中。你验证 GetSector 是否真的有值?
  • @BrianMStafford 嗨,是的,它总是有一个值,我举的例子是我正在循环的表中的第一条记录。
  • 我想您需要验证 GetSector 变量是否包含您认为的内容。也许使用 Debug.Print() 在输出窗口中显示。也许 Dim GetSector as String 也可能将记录集中的值强制转换为字符串,如果它是其他一些变体类型。
  • @DS_London 嗨,这两件事我都做过。该变量确实包含数据。当我调试时,打印出来的唯一奇怪的事情是结束引号放在下面的行上。
  • 也许你的字符串包含一些额外的字符(例如\n)?尝试检查 len() 并查看它是否是您认为应该的。

标签: sql excel vba


【解决方案1】:

感谢@DS_London,我发现变量中的长度计数比字符串字符高 2。

我通过从 excel 复制并粘贴到 sequal 表中创建了查找表,所以即使它看起来不错,它也必须附加附加字符(永远不要这样做!)

感谢 DS 和所有观看的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 2011-02-02
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2020-10-08
    • 2019-04-17
    • 2014-11-19
    相关资源
    最近更新 更多