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