Метод 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