【问题标题】:Cannot change the ActiveConnection property of a Recordset object无法更改 Recordset 对象的 ActiveConnection 属性
【发布时间】:2016-10-31 00:13:17
【问题描述】:

我正在尝试打开一个记录集,以便获得RecordCount 的准确值。我有一些代码通过使用Recordset.OpenadOpenStaticadLockReadOnly 常量成功地做到了这一点。但是,当我使用以下代码时。

With cmd
    .ActiveConnection = db
    .CommandType = adCmdStoredProc
    .CommandText = "doGetBookingCrewDetails"

    .Parameters.Append .CreateParameter("@bookingid", adInteger, adParamInput)
    .Parameters("@bookingid") = 42943

    .Parameters.Append .CreateParameter("@starttime", adDBTimeStamp, adParamInput)
    .Parameters("@starttime") = "07/10/2016 00:00"
End With

Set rsCr = Server.CreateObject("ADODB.Recordset")
rsCr.Open cmd, db, adOpenStatic, adLockReadOnly

我得到了错误

0x800a0e7b - ADODB.Recordset:无法更改以 Command 对象为源的 Recordset 对象的 ActiveConnection 属性。

上面的代码在使用Command.Execute 时返回了正确的结果集,但是我无法指定似乎使行计数属性起作用的常量。

我该如何进行这项工作?

【问题讨论】:

  • 此页面:msdn.microsoft.com/en-us/library/ms675544(v=vs.85).aspx 说明:对于 Source 属性设置为有效 Command 对象的 Recordset 对象,ActiveConnection 属性是只读的,即使 Recordset 对象未打开也是如此。 它还说activeconnection 参数是可选的。所以简而言之,尝试db 传递给rsCr.open
  • 是的,您的建议有效。我以为我真的试过了,你猜不是!
  • 该链接还说,“如果您在 Source 参数中传递一个 Command 对象并同时传递一个 ActiveConnection 参数,则会发生错误。Command 对象的 ActiveConnection 属性必须已经设置为有效的 Connection对象或连接字符串。”
  • 感谢您返回解决方案。为什么不将其添加为答案并接受它。
  • 我想我会给你机会来夺取荣耀。它是您的解决方案。

标签: vbscript asp-classic ado


【解决方案1】:

以下是Open Method (ADO Recordset)的一些观点:

ActiveConnection 属性对于 Source 属性设置为有效 Command 对象的 Recordset 对象是只读的,即使 Recordset 对象未打开也是如此。

activeconnection 参数是可选的。

还有

如果您在 Source 参数中传递 Command 对象并同时传递 ActiveConnection 参数,则会发生错误。 Command 对象的 ActiveConnection 属性必须已设置为有效的 Connection 对象或连接字符串

简而言之,尽量不要将db 传递给rsCr.open

类似这样的:

rsCr.Open cmd, , adOpenStatic, adLockReadOnly

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多