Вызываю функцию. В ней открываю объект
wrkCurrent Далее идёт транзакция.
Мне вот что непонятно.
Когда закрываю wrkCurrent,
wrkCurrent.Close
Set wrkCurrent = Nothing
то потом, после завершения функции и возврата в основную процедуру открытые рекордсеты в ней отваливаются.
Я так понял, что wrkCurrent закрывать не нужно (тогда всё нормально работает). Так? А почему?
wrkCurrent ссылается на текущую рабочую область.
Получается что, нельзя делать wrkCurrent.Close?
Не будут ли накапливаться объекты wrkCurrent?
Функция работает в цикле.
Private Function InsertStorage() As Boolean
On Error GoTo Err_Handle
InsertStorage = False
Dim LogBeginTrans As Boolean
LogBeginTrans = False
Dim wrkCurrent As DAO.Workspace
Set wrkCurrent = DAO.DBEngine.Workspaces(0) 'Это из Гетца
wrkCurrent.BeginTrans
LogBeginTrans = True
Dim dbs As DAO.Database
Set dbs = CurrentDb()
Dim rst As DAO.Recordset
Set rst = dbs.OpenRecordset("tblStorage", , dbAppendOnly)
rst.AddNew
rst("DateStart") = Me.StartStorage
rst("DateEnd") = Me.EndStorage
rst("QtyDays") = (Me.EndStorage- Me.StartStorage ) + 1
rst.Update
rst.Close
Set rst = Nothing
dbs.Close
Set dbs = Nothing
wrkCurrent.CommitTrans
LogBeginTrans = False
'Если мы здесь, нет ошибки, значит хранение добавлено
InsertStorage = True 'хранение рассчитано
Exit_Handle:
If Not rst Is Nothing Then
rst.Close
Set rst = Nothing
End If
If Not dbs Is Nothing Then
dbs.Close
Set dbs = Nothing
End If
'Этот объект нельзя закрывать. Иначе дальше возникают ошибки.
' wrkCurrent.Close
' Set wrkCurrent = Nothing
Exit Function
Err_Handle:
If LogBeginTrans = True Then
wrkCurrent.Rollback
LogBeginTrans = False
End If
MsgBox Err.Source & vbCrLf & Err.Description, vbExclamation, "Сообщение об ошибке"
Resume Exit_Handle
End Function