Добрый день, уважаемые знатоки!
Всех с прошедшим профессиональным праздником!
Помогите пожалуйста разобраться в вопросе.
Я создаю базу для склада инструмента. Она будет разделенной (таблицы отдельно, формы и прочее отдельно). Задался таким вопросом: как сделать так, чтобы при последовательной записи в разные таблицы, в случае непредвиденных ситуаций не произошло так, что в одну таблицу данные записались, в другую - нет. Отсюда мой первый вопрос: 1) Самый простой и правильный выход в данной ситуации использовать транзакции?
Если да, то с ними у меня тоже проблема и отсюда мой второй вопрос 2) Как сделать так, чтобы транзакции нормально проводились? Что я делаю не так?
Дело в том, что при выполнении кода, на строчке с Rollback или CommitTrans вылетает ошибка "попытка занесения или свертывания транзакции без предварительного начала транзакции". Подскажите как сделать так, чтобы все работало )
Прошу больно не пинать за кривой код. Я в этом деле не профессионал, и не все понимаю, что делаю :) Некоторые куски кода просто беру из справки, до конца не осознавая как там что работает. С транзакциями также поступал - брал код из примера support.office, только не работает он у меня.
Привожу кусок кода, повешенный на нажатие кнопки на форме.
Dim rsSpisanieAktual As Recordset
Dim KolVo As Long, VarIdJournal As Long
Dim wrk As DAO.Workspace
Set wrk = DBEngine(0)
wrk.BeginTrans
'-------------запись в таблицу Журнал выдачи
With Me.Form.Recordset
.AddNew
![Кол-во] = [ПолеКолво]
![id_рабочий] = [ПолеФИО]
![на_заказ_№] = [ПолеЗаказ]
![Дата_in/out] = [ПолеДата]
![Id_инструмент] = [ВыборМаркировка]
.Update
End With
'/-------------запись в таблицу Журнал выдачи
'-----------запись в таблицу Журнал_спис_я_актуал
KolVo = [ПолеКолво]
VarIdJournal = [id_журнал]
DoCmd.GoToRecord , "", acNewRec
Set rsSpisanieAktual = CurrentDb.OpenRecordset("SELECT [id_журнал], [кол-во_не_списано] FROM [Журнал_спис_я_актуал]")
With rsSpisanieAktual
.AddNew
![id_журнал] = VarIdJournal
![кол-во_не_списано] = KolVo
.Update
End With
Set rsSpisanieAktual = Nothing
'/----------запись в таблицу Журнал_спис_я_актуал
wrk.CommitTrans dbForceOSFlush
'wrk.Rollback
На самом деле, таблиц, куда идет запись больше. Просто смысла нет код целиком приводить, я думаю.
http://www.sql.ru/forum/1271500/tranzakcii