-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


транзакции

Четверг, 14 Сентября 2017 г. 12:40 + в цитатник
Добрый день, уважаемые знатоки!
Всех с прошедшим профессиональным праздником!
Помогите пожалуйста разобраться в вопросе.

Я создаю базу для склада инструмента. Она будет разделенной (таблицы отдельно, формы и прочее отдельно). Задался таким вопросом: как сделать так, чтобы при последовательной записи в разные таблицы, в случае непредвиденных ситуаций не произошло так, что в одну таблицу данные записались, в другую - нет. Отсюда мой первый вопрос: 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


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку