sql-server - ADODB 打开记录集失败/"Operation is not allowed when object is closed"

标签 sql-server vba ado adodb recordset

我在 Excel 中有以下 UDF,它使用 ADO 连接到我的 MSSQL 服务器。在那里它应该执行标量 udf“D100601RVDATABearingAllow”。

由于某种原因,我尝试附加的参数没有发送到 SQL Server。仅在服务器上:

SELECT dbo.D100601RVDATABearingAllow

到达。

我的 EXCEL UDF:

   Function RVDATA(Fastener) As Long

    Dim cnt As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim Cmd1 As ADODB.Command
    Dim stSQL As String

Const stADO As String = "Provider=SQLOLEDB.1;Data ................"
'----------------------------------------------------------
Set cnt = New ADODB.Connection
 With cnt
    .ConnectionTimeout = 3
    .CursorLocation = adUseClient
    .Open stADO
    .CommandTimeout = 3
 End With
'----------------------------------------------------------
Set Cmd1 = New ADODB.Command
    Cmd1.ActiveConnection = cnt
    Cmd1.CommandText = "dbo.D100601RVDATABearingAllow"
    Cmd1.CommandType = adCmdStoredProc
'----------------------------------------------------------
Set Param1 = Cmd1.CreateParameter("Fastener", adInteger, adParamInput, 5)
Param1.Value = Fastener
Cmd1.Parameters.Append Param1
Set Param1 = Nothing
'----------------------------------------------------------
Set rst = Cmd1.Execute()
RVDATA = rst.Fields(0).Value    
'----------------------------------------------------------
    rst.Close
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing
'----------------------------------------------------------
End Function

当我使用 adCmdStoredProc 时,整个事情都会失败,并且在 vba 调试器中,记录集的属性有很多“对象关闭时不允许操作”(听起来可能有点不同,该消息已翻译)

当我不使用 adCmdStoredProc 时,我收到一条消息:变量紧固件未提供

我认为我打开记录集的方式可能有问题。 在其他步骤中,我读到了有关使用“SET NOCOUNT ON”选项的信息,但这也不起作用。

有人有想法吗? 问候伦比

最佳答案

也遇到了这个错误(在我的例子中,我使用存储过程来检索一些信息)。我做了一些更改,导致执行故障。

当我将 SET NOCOUNT ON 作为存储过程的第一个语句时,错误消失了。

关于sql-server - ADODB 打开记录集失败/"Operation is not allowed when object is closed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663617/

相关文章:

php - 通过加密安全地从 PHP 连接到 MSSQL?

vba - 带有 If 语句的 Msgbox

vba - 在VBA中查找错误行号

vbscript - SQL native 客户端数据类型兼容性 - 与 SQLOLEDB 不兼容

sql - SQL 查询具有自定义文件扩展名的平面文件时出错

sql - 解决 VB6 中的 ADO 超时问题

sql - 如何增加每次 INSERT INTO 迭代的值?

sql-server - 使用 SSIS 导入空白 Excel 列

sql - 即使已登录也删除 SQL 登录

Excel VBA,错误 438 "object doesn' t 支持 WorksheetFunction 上的此属性或方法