【发布时间】:2016-05-21 03:19:49
【问题描述】:
我需要从 Excel 调用存储过程,将用户输入的几个值作为参数传递。我几乎通过使用以下参数集合的宏实现了这一点。
Set ADOCmd = New ADODB.Command
With ADOCmd
.Parameters.Append .CreateParameter("@Department", adChar, adParamInput, Len(cDept), cDept)
.Parameters.Append .CreateParameter("@title", adChar, adParamInput, Len(cTitle), cTitle)
.Parameters.Append .CreateParameter("@name", adChar, adParamInput, Len(cName), cName)
.Parameters.Append .CreateParameter("@email", adChar, adParamInput, Len(cEmail), cEmail)
.Parameters.Append .CreateParameter("@tel_no", adChar, adParamInput, Len(cTel), cTel)
.Parameters.Append .CreateParameter("@mob_no", adChar, adParamInput, Len(cMob), cMob)
End With
如果用户填写了所有值,这将正常工作。但是,如果将任何内容留空,则会发生以下错误。
Run-time error:'3708':
Parameter object is improperly defined. Inconsistent or incomplete information was provided.
我被引导相信这是因为在 CreateParameter 函数中传递的 Size 参数为零。有什么办法可以解决这个问题吗?如果输入的字符串长度为零字符,它不应该接受零作为有效大小吗?
提前致谢。
【问题讨论】:
-
所以表中的列是 char 而不是 varchar?
-
长度应该是参数的最大大小,所以它是存储过程中声明的参数的长度,而不是传递给它的字符串的长度。
-
Alex K 和 Tom H,大声呼喊,谢谢。我已经尝试使用列的最大大小,但随后它在字符串的末尾添加了空格。我将其更改为 adVarChar 并再次将列的最大大小添加为 Size 并删除了空格。感谢您的帮助!
标签: sql vba sql-server-2008 excel stored-procedures