Ошибка Sybase Ase 15 для нескольких наборов записей и активной транзакции - PullRequest
0 голосов
/ 20 августа 2010

У нас есть очень старые приложения 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

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

В итоге ребята из Sybase прислали нам новые драйверы, и это решило проблему

0 голосов
/ 20 августа 2010

меняет ли строки

objRs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly

и

objRs2.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly

помощь

...