多个记录集和活动事务上的 Sybase Ase 15 错误

发布于 2024-09-14 19:05:48 字数 1634 浏览 4 评论 0原文

我们有非常古老的 VB6 应用程序连接到 Sybase 数据库。如今,它们通过 ODBC 连接到 Sybase ASE 15 服务器,使用 Open Client 12 驱动程序运行良好。

有计划升级到 OpenClient 15 驱动程序,在该版本中我收到此错误:

运行时错误“-2147467259(80004005)”

事务不能有多个具有此游标类型的记录集。

更改游标类型、提交事务或关闭记录集之一。

据我了解,在互联网上搜索,问题出在游标上。

在 ODBC 配置管理器的旧驱动程序中,有一个“性能”选项卡,并且光标中有“选择方法”,但在新驱动程序中,此选项卡消失了,我们得到的有关光标的全部内容只是“选择方法”中的一个部分。 常规选项卡名为光标行为,其中我们选中了使用光标选项。

这是一个小代码片段,我可以在其中重现该问题。感谢所有帮助。

  Dim conObj As ADODB.Connection
  Dim objRs As ADODB.Recordset
  Dim objRs2 As ADODB.Recordset
  Set conObj = New ADODB.Connection
  conObj.ConnectionTimeout = 10
  conObj.CommandTimeout = 5
  conObj.Provider = "MSDASQL"
  conObj.Open "DSN=cdbur32;UID=***;PWD=***;Database=dbsait;WSID=Test;APP=Test"
  conObj.CursorLocation = adUseClient
  conObj.BeginTrans
  Set objRs = New ADODB.Recordset
  Set objRs.ActiveConnection = conObj
  objRs.Source = "select id_estatus_aplicacion from dbo.cat_sait_estatus_aplicaciones"
  objRs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly
  objRs.LockType = ADODB.LockTypeEnum.adLockReadOnly
  objRs.Open
  objRs.MoveNext
  Debug.Print objRs("id_estatus_aplicacion")
  Set objRs2 = New ADODB.Recordset
  Set objRs2.ActiveConnection = conObj
  objRs2.Source = "select * from dbo.cat_sait_estatus_aplicaciones"
  objRs2.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly
  objRs2.LockType = ADODB.LockTypeEnum.adLockReadOnly
  objRs2.Open 'error here
  objRs.MoveNext
  Debug.Print objRs("id_estatus_aplicacion")
  conObj.RollbackTrans
  objRs.Close
  objRs2.Close
  Set conObj = Nothing

We have very old VB6 applications connecting to a Sybase database. Today they are running fine using the Open Client 12 drivers via ODBC connecting to a Sybase ASE 15 servers.

There is a plan on upgrading to the OpenClient 15 drivers and with that version I'm getting this error:

Run-time error '-2147467259(80004005)'

Transaction cannot have multiple recordsets with this cursor type.

Change the cursor type, commit the transaction, or close one of the recordsets.

As I understand searching the internet, the problem is in the Cursors.

In the old drivers in the ODBC configuration manager there was a Performance Tab and we have the Select Method in cursor, but with the new drivers this tab is gone and all we got about cursors is a section in the General tab named Cursor Behavior, in there we have the option Use Cursors checked.

Here is a little code snippet where I can reproduce the problem. All help is appreciated.

  Dim conObj As ADODB.Connection
  Dim objRs As ADODB.Recordset
  Dim objRs2 As ADODB.Recordset
  Set conObj = New ADODB.Connection
  conObj.ConnectionTimeout = 10
  conObj.CommandTimeout = 5
  conObj.Provider = "MSDASQL"
  conObj.Open "DSN=cdbur32;UID=***;PWD=***;Database=dbsait;WSID=Test;APP=Test"
  conObj.CursorLocation = adUseClient
  conObj.BeginTrans
  Set objRs = New ADODB.Recordset
  Set objRs.ActiveConnection = conObj
  objRs.Source = "select id_estatus_aplicacion from dbo.cat_sait_estatus_aplicaciones"
  objRs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly
  objRs.LockType = ADODB.LockTypeEnum.adLockReadOnly
  objRs.Open
  objRs.MoveNext
  Debug.Print objRs("id_estatus_aplicacion")
  Set objRs2 = New ADODB.Recordset
  Set objRs2.ActiveConnection = conObj
  objRs2.Source = "select * from dbo.cat_sait_estatus_aplicaciones"
  objRs2.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly
  objRs2.LockType = ADODB.LockTypeEnum.adLockReadOnly
  objRs2.Open 'error here
  objRs.MoveNext
  Debug.Print objRs("id_estatus_aplicacion")
  conObj.RollbackTrans
  objRs.Close
  objRs2.Close
  Set conObj = Nothing

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

誰ツ都不明白 2024-09-21 19:05:48

换线有

objRs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly

帮助

objRs2.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly

吗?

Does changing lines

objRs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly

and

objRs2.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly

help?

不念旧人 2024-09-21 19:05:48

最后,Sybase 人员给我们发送了新的驱动程序,解决了问题

in the end the Sybase guys send us a new drivers and that fixed the problem

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文