Соединение VB6 ADO - Как Проверить если в Транзакцию?

Там какой-либо путь состоит в том, чтобы сказать, с помощью просто объект ADODB.Connection, вовлекается ли он в настоящее время в транзакцию?

Я хотел бы смочь протестировать это на самом объекте подключения, не полагаясь на хранение булевской переменной рядом с обновленным.

11
задан Deanna 3 May 2012 в 13:19
поделиться

3 ответа

Метод BeginTrans может использоваться как функция, которая возвращает уровень вложенности транзакции. Если вы создаете свойство для его хранения, вы можете проверять его в любом месте, чтобы узнать, больше ли оно 0. При фиксации или откате вам нужно будет самостоятельно уменьшить значение свойства.

Private m_TransLevel As Long

Public Property Get TransactionLevel() As Long
    TransactionLevel = m_TransLevel
End Property
Public Property Let TransactionLevel(vLevel As Long)
    m_TransLevel = vLevel
End Property

Public Sub SaveMyData()

    TransactionLevel = adoConnection.BeginTrans()
    ...

End Sub

Вы также можете адаптировать возвращаемое значение для работы внутри функции, которая возвращает True / False, если уровень> 1. Мне это тоже не нравится, но это будет выглядеть примерно так (без обработки ошибок)

Public Function IsConnectionInsideTransaction(ByVal vADOConnection as ADOBD.Connection) As Boolean
    Dim intLevel As Integer

    If vADOConnection.State = AdStateOpen Then
        intLevel = vADOConnection.BeginTrans()
        IsConnectionInsideTransaction = (intLevel > 1)
        vADOConnection.RollbackTrans
    End If

End Function
10
ответ дан 3 December 2019 в 09:19
поделиться

Похоже, вы можете проверить состояние ADO. http://msdn.microsoft.com/en-us/library/ms675068%28v=VS.85%29.aspx

Вы, вероятно, уже знаете эту другую часть, но я все равно опубликую ее.

Здесь объясняется, как транзакции работают с ADO в VB. http://support.microsoft.com/kb/198024

0
ответ дан 3 December 2019 в 09:19
поделиться

Вы не сможете этого сделать, если сами не отследите это. У объекта подключения нет свойства, связанного с состоянием транзакции. Вам нужно, чтобы ваш процесс установил флаг в другой области таблицы / настроек, если он вам НЕОБХОДИМ (что может быть проблематичным, если возникают необработанные ошибки и флаг состояния когда-либо "застревает" с недопустимым статусом, вам нужно подойти с действительным «тайм-аутом» или переопределением игнорировать / уничтожать / перезаписывать предыдущее).

0
ответ дан 3 December 2019 в 09:19
поделиться