0

Sybase データベースに接続する非常に古い VB6 アプリケーションがあります。現在、Sybase ASE 15 サーバーに接続する ODBC 経由で Open Client 12 ドライバーを使用して正常に動作しています。

OpenClient 15 ドライバーにアップグレードする計画があり、そのバージョンでは次のエラーが発生します。

実行時エラー '-2147467259(80004005)'

トランザクションは、このカーソル タイプの複数のレコードセットを持つことはできません。

カーソルの種類を変更するか、トランザクションをコミットするか、レコードセットの 1 つを閉じてください。

インターネットを検索して理解しているように、問題はカーソルにあります。

ODBC 構成マネージャーの古いドライバーには [パフォーマンス] タブがあり、カーソルに[メソッドの選択] がありましたが、新しいドライバーではこのタブがなくなり、カーソルについて得られるのは、 [カーソルの動作] という名前の [全般] タブのセクションだけです。ここでは、 Use Cursorsオプションがチェックされています。

問題を再現できる小さなコード スニペットを次に示します。すべての助けに感謝します。

  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
4

2 に答える 2

0

行を変更しますか

objRs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly

objRs2.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly

ヘルプ?

于 2010-08-20T14:07:11.867 に答える
0

最後に、Sybase の担当者が新しいドライバーを送ってくれて、問題は解決しました。

于 2012-02-01T17:01:38.440 に答える