【发布时间】: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() 并查看它是否是您认为应该的。