【问题标题】:ADO recordset has no recordcount with source set to ADO command (stored procedure)ADO 记录集没有记录计数,源设置为 ADO 命令(存储过程)
【发布时间】:2016-12-14 05:22:36
【问题描述】:

我在 VBA 中有一个 ADO 命令对象,它正在运行并从存储过程(在 SQL Server 中)返回值。为了验证 VBA 中的 SP 和命令行,我使用 CopyFromRecordset 方法查看数据,一切正常。

Set ADOComm = New ADODB.Command
With ADOComm
    .ActiveConnection = ADOConn
    .CommandType = adCmdStoredProc
    .CommandText = "GenerateMasterSumIfs"
    .Parameters.Append .CreateParameter("ImportFilePath", adVarChar, adParamInput, 100, TextFileSavePath)
End With

Set ADORec = New ADODB.Recordset
Set ADORec = ADOComm.Execute

我现在希望能够使用 FIND 或 GETROWS(例如)导航返回的记录,但记录集似乎没有数据(recordset.RecordCount 返回 -1)。我尝试在网上对此进行研究,发现对游标类型的引用受到限制,具体取决于源(在我的例子中是 SQL Server),但我无法找到我可以理解和使用的解决方案。

所以,具体来说,我的问题是:

  1. 我能否继续使用 ADO 命令/记录集组合来整理我的数据然后“导航”它?或
  2. 是否需要使用其他方法运行 SP 才能启用所需的导航?

我不是该领域的专家,因此感谢您耐心等待我的技术描述和任何网站礼仪失礼。

【问题讨论】:

  • 你的存储过程中有SET NOCOUNT ON;吗?
  • 不是。我尝试将其添加到我的 SP 中,但这对我的情况没有任何影响。但是,我已经解决了我的问题(请参阅我的答案)。不过,感谢您的建议。

标签: sql-server vba stored-procedures


【解决方案1】:

我需要的解决方案是 ADO Connection 对象的 CursorLocation 属性。将其更改为 adUseClient 允许我移动光标并根据需要使用 FIND 和 GETROWS 等方法。

Set ADOConn = New ADODB.Connection
ADOConn.CursorLocation = adUseClient   
ADOConn.Open "Driver={SQL Server Native Client 11.0};Server=ServerName;Database=DBName;Trusted_Connection=yes;"

Set ADOComm = New ADODB.Command
With ADOComm
    .ActiveConnection = ADOConn
    .CommandType = adCmdStoredProc
    .CommandText = "GenerateMasterSumIfs"
    .Parameters.Append .CreateParameter("ImportFilePath", adVarChar, adParamInput, 100, TextFileSavePath)
    .Parameters.Append .CreateParameter("MTFilePath", adVarChar, adParamInput, 100, PathToMT)
End With

Set ADORec = New ADODB.Recordset
Set ADORec = ADOComm.Execute

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多