【问题标题】:MS Access VBA interpreting string from SQL as int?MS Access VBA将SQL中的字符串解释为int?
【发布时间】:2021-02-21 12:43:19
【问题描述】:

我有一个 SQL Server 存储过程,它向 Access VBA 返回一个 varchar 值,但我从 Access 收到一个错误,说它无法将 varchar 值转换为 int。无论是过程还是在 VBA 中,都没有将返回值指定为整数。为了这篇文章,我已经简化了实际代码。以下不是完整代码。

存储过程:

create procedure proc 
@CreateOrUpdate varchar(6) output
as
begin
select @CreateOrUpdate = 'Create'
return @CreateOrUpdate
end

在访问 VBA 中:

Dim Com As ADODB.Command
Set Com = New ADODB.Command
With Com
    .ActiveConnection = Cnn  (Set elsewhere - No problems with this)
    .CommandType = adCmdStoredProc
    .CommandText = "proc"
    .Parameters.Append .CreateParameter("@CreateOrUpdate", adVarChar, adParamOutput, 6)
End With

结果: "将 varchar 值 'Create' 转换为数据类型 int 时转换失败。"

我还有其他返回值也是 varchar,语法相同,我对它们没有任何问题。任何帮助表示赞赏。

【问题讨论】:

  • “我还有其他返回值也是 varchar,语法相同,我对它们没有任何问题” 我对此表示怀疑,除非它们可以隐式转换为一个int;然后你还有其他问题。
  • 如果您有“其他也是 varchar 的返回值”,只有在它们始终可转换为整数时才会巧合地工作(包括 NULL 值和空字符串/空格 - 这些将最终为 0)。如果它们在RETURN 语句中使用,您绝对应该删除它们。不过,您可以有任意数量的VARCHAR 输出参数。

标签: sql-server vba stored-procedures


【解决方案1】:

问题是您尝试使用RETURN 来返回OUTPUT 参数的值。 RETURN用于表示Procedure的成功; 0 表示成功,其他任何表示失败。 RETURN 返回一个int,因此RETURN @CreateOrUpdate 将隐式尝试将@CreateOrUpdate 转换为int(因此失败)。

不要RETURNOUTPUT 值,只需分配它:

CREATE PROC MyProc @CreateOrUpdate varchar(6) OUTPUT AS
BEGIN
    SELECT @CreateOrUpdate = 'Create';
END;

虽然上面说的完全没有意义。它想达到什么目的..?

【讨论】:

  • 在你的问题下查看我的comment@BellaFiorenza。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多