У нас есть очень старые приложения VB6, подключающиеся к базе данных Sybase. Сегодня они работают нормально, используя драйверы Open Client 12 через ODBC, подключаясь к серверам Sybase ASE 15.
Существует план по обновлению до драйверов OpenClient 15, и с этой версией я получаю эту ошибку:
Ошибка времени выполнения '-2147467259 (80004005)'
Транзакция не может иметь несколько наборов записей с этим типом курсора.
Изменить тип курсора, зафиксировать транзакцию или закрыть один из наборов записей.
Как я понимаю при поиске в Интернете, проблема в курсорах.
В старых драйверах в диспетчере конфигурации ODBC была вкладка Performance, и у нас есть Select Method в курсоре, но с новыми драйверами эта вкладка исчезла, и все, что мы получили о курсорах - это раздел на вкладке Общие с именем Поведение курсора , там есть опция Использовать курсоры проверено.
Вот небольшой фрагмент кода, где я могу воспроизвести проблему. Вся помощь приветствуется.
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