【问题标题】:Error Executing Macro执行宏时出错
【发布时间】:2019-01-23 12:32:01
【问题描述】:

我正在尝试设置一个宏,该宏调用 SQL 以执行存储过程,但在我运行它时不断收到消息。我可以通过 SSMS 中的 SQL 查询来执行 Store 过程。有什么想法吗?

错误: “应用程序为当前操作使用了错误类型的值。”在第 22 行位置 0

代码

Const adParamInput = &H0001 
Const adVarChar = 200
Dim strServerName
Dim strDatabase
Dim strUserName
Dim strPassword

strServerName="5.5.5.5"
strDatabase="MYDB"
strUserName="DBUSER"
strPassword="DBPASS"
strcnn="Driver={SQL Server};Server=" & strServerName & ";Database=" & strDatabase & ";Uid=" & strUsername & ";Pwd=" & strPassword & ";"
Set Conn = CreateObject("ADODB.Connection")
conn.open strcnn
Set Cmd = CreateObject("ADODB.Command")
Cmd.ActiveConnection = conn
' Set up the parameter for our Stored Procedure *** watch the line wrap ***
Cmd.Parameters.Append Cmd.CreateParameter("I_PartID", adVarChar, adParamInput , 30, "E N T E R    Y O U R    P A R T    I D")
Cmd.CommandText = "SP_UpdateUDF"
Cmd.Execute

【问题讨论】:

  • 您发布了 19 行代码。哪一个是“22号线”?

标签: sql-server vba ssms


【解决方案1】:

您正在创建一个长度为 30 的 adVarchar 类型的参数,但传递了一个长度为 38 的字符串。错误消息有点误导,实际上它抱怨长度。

如果您的 Proc 预计最多 30 个字符,请缩短您的字符串。否则你可以解决你的问题

Const pVal = "E N T E R    Y O U R    P A R T    I D"
cmd.Parameters.Append cmd.CreateParameter("I_PartID", adVarChar, adParamInput, Len(pVal), pVal)

【讨论】:

  • 嗨 FunThomas,我通过将它从 30 更改为 38 让它消失了。感谢您指出这一点。现在我必须弄清楚为什么弹出框不会提示用户输入数据。大声笑
  • 什么弹出框?它是 Proc 的一部分吗(据我所知,TSQL 中没有输入框)。为什么不把输入框放在你的VBA代码中,把输入的ID作为参数传递呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 2018-08-24
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多