【问题标题】:TSQL & VBA - Output / Return Value?TSQL & VBA - 输出/返回值?
【发布时间】:2014-07-22 15:32:29
【问题描述】:

我似乎很难从我的 SP 获取返回值到 VBA。

我在我的 T-SQL 中发出了 RETURN,这很好,但我似乎无法弄清楚如何在 VBA 中获取值?

Dim qd As QueryDef
Dim db As DAO.Database
Dim vRate As Integer
vRate = 3
Set db = CurrentDb
Set qd = db.QueryDefs("spCC_UpdateRAG")

' inital rating
qd.SQL = "EXEC spCC_UpdateRAG @Col = 'Rating', @RAG = " & Nz(vRate, "NULL") & ", @Case_ID = 36"
qd.Execute

除了我似乎无法获得返回值之外,这工作正常吗?

所以我想我会尝试使用 OUPUT 参数,但是如果你不给它们分配一个值,SQL 就会抱怨,这没有意义,因为它们是输出而不是输入参数?

所以我在我的 T-SQL 中尝试了这个...

-- return failure (false)   
SET @Result = 0

SELECT @Result

但这给了我一个我不想要的结果集返回和一个没有名称的列,所以如果我必须这样做..

-- return failure (false)   
SET @Result = 0

SELECT @Result AS Result

有什么意义?我还不如...

SELECT 0 AS Result

无论哪种方式,我都会返回一个记录集,但我不想要一个,我只想返回一点(真/假)

SP 成功与否,我如何做到这一点并在我的 VBA 代码中获取值?

感谢您的意见。 1DMF

【问题讨论】:

  • 查看adParamReturnValue 参数在this SO answerADODB.Command 对象的CreateParameter 方法中是如何使用的。
  • ?我没有使用 ADODB,您是说无法使用访问社区告诉我的内容用于我的所有数据库活动 -> DAO。
  • 这不是我可以一句话回答的问题。简短的回答是在 DAO 与 ADODB 的情况下,“始终使用 X”过于简单化了。您几乎总是可以侥幸支持一种选择,而且通常不会注意到任何真正的区别。我建议你做一些谷歌搜索。
  • 关于“访问社区已告知我将 [DAO] 用于我的所有数据库活动”,DAO 最适合 Jet/ACE 数据库引擎。 ADODB允许你直接接入SQL Server,所以我推荐在这种情况下使用,这与general consensus一致。
  • 谢谢 Mike,我会调查一下,不过我会指出,我只使用 MS SQL 通过链接表或 SP 以及使用 DAO 的直通查询,并且已经使用了很多年,因此想知道为什么人们声称您需要 ADODB,而我知道您不需要 SQL。总是很难从人们的意见中筛选出真相以及解决问题的实际需要。

标签: sql-server vba tsql stored-procedures


【解决方案1】:

最后我选择了以下解决方案,因为我似乎无法在我的 VBA 代码中获得返回值或参数集合。 (也许是使用 DAO 的直通查询的限制?)

SP 只返回一个记录集,1 行/1 列(结果 = 0|1)

然后在 VBA 中

Dim rs As DAO.Recordset
Dim qd AS QueryDef
Dim bOK As Boolean

Set qd = CurrentDb.QueryDefs("my_pass_through_query")
qd.SQL = "EXEC my_SP @arg1 = 'value1', @arg2 = value2"
Set rs = qd.OpenRecordset(dbOpenSnapshot)
bOK = rs.Fields("Result")

Set rs = Nothing
Set qd = Nothing

对于我想要实现的目标来说,这有点令人费解,但它确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 2012-06-03
    • 2023-01-24
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多