powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как проверить выполнение SQL инструкции перед записью результатов?
18 сообщений из 18, страница 1 из 1
Как проверить выполнение SQL инструкции перед записью результатов?
    #39861394
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Уважаемый форум,

Есть Office 365, Access. Есть блок инструкций, которые необходимо выполнить в комплексе, т.е. при сбое одной из них, нужно откатить все предыдущие. Как-то не складывается использовать begin, commit, rolback. Пример:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
On Error Goto err

db.BeginTrans
db.Execute("DELETE FROM Table"), dbSeeChanges, dbFailOnError
db.Execute("INSERT INTO Table SELECT * FROM Table2"), dbSeeChanges, dbFailOnError
db.CommitTrans

err:
db.RollbackTrans



Т.е. в примере происходит выполнение инструкции DELETE, затем ошибка при выполнении INSERT, но DELETE не открывается - записи удаляются.

Что не так или чего я недопонимаю? Спасибо!
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39861551
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFK,

Я бы не полагался на авто откаты, делал бы точную копию (как буфер) Table, над ней бы экспериментировал и уже из неё (из копии) заливал конечный результат в Table... Да и всё в целом как-то не логично - если изначально содержимое Table не нужно (ибо удаляется всё под ноль), то зачем его восстанавливать потом?
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39861577
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы показали, что есть объект db , что ли... ADODB.Connection? тогда где adExecuteNoRecords? или оно - что-то ещё?
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39861601
IFKКак-то не складывается использовать begin, commit, rolback. Пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
On Error Goto err

db.BeginTrans
db.Execute("DELETE FROM Table"), dbSeeChanges, dbFailOnError
db.Execute("INSERT INTO Table SELECT * FROM Table2"), dbSeeChanges, dbFailOnError
db.CommitTrans

err:
db.RollbackTrans



Т.е. в примере происходит выполнение инструкции DELETE, затем ошибка при выполнении INSERT, но DELETE не открывается - записи удаляются. 1. У объекта Database нет метода BeginTrans и т.п. Это методы Workspace.
2. В DAO у метода Execute два аргумента (запрос , параметры), а у вас dbFailOnError идет 3-м.

Странно, что у вас это вообще работает.

ЗЫ. dbSeeChanges с методом Execute никогда не использовал, достаточно dbFailOnError.
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39861705
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если внимательно и вдумчиво почитать про транзакции,то Ваша задача довольно просто решается
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39861781
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKЧто не так или чего я недопонимаю?смотри в FAQ/MS Access/Как запускать запросы из VBA раздел 2.6
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39861782
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFK, и скобки д..е убери
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863189
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
AkinaВы бы показали, что есть объект db , что ли... ADODB.Connection? тогда где adExecuteNoRecords? или оно - что-то ещё?

Да, ADODB.Connection
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863191
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
vmagIFK,

Я бы не полагался на авто откаты, делал бы точную копию (как буфер) Table, над ней бы экспериментировал и уже из неё (из копии) заливал конечный результат в Table... Да и всё в целом как-то не логично - если изначально содержимое Table не нужно (ибо удаляется всё под ноль), то зачем его восстанавливать потом?

Оно не восстанавливается, а перезаписывается с измененными данными. Не хочу возиться с индивидуальными полями для каждой записи - их дохрена и проверять изменилось ли содержимое каждого поля, чтобы потом его проапдейтить - слишком долго и муторно. Проще прибить старую запись и внести ее же, только с актуальными данными.
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863192
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Кривцов АнатолийIFKКак-то не складывается использовать begin, commit, rolback. Пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
On Error Goto err

db.BeginTrans
db.Execute("DELETE FROM Table"), dbSeeChanges, dbFailOnError
db.Execute("INSERT INTO Table SELECT * FROM Table2"), dbSeeChanges, dbFailOnError
db.CommitTrans

err:
db.RollbackTrans



Т.е. в примере происходит выполнение инструкции DELETE, затем ошибка при выполнении INSERT, но DELETE не открывается - записи удаляются. 1. У объекта Database нет метода BeginTrans и т.п. Это методы Workspace.
2. В DAO у метода Execute два аргумента (запрос , параметры), а у вас dbFailOnError идет 3-м.

Странно, что у вас это вообще работает.

ЗЫ. dbSeeChanges с методом Execute никогда не использовал, достаточно dbFailOnError.

А у меня не DAO, а ADODB. Там есть, судя по интеллисенсу.
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863194
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
ПанургIFK, и скобки д..е убери

Какие скобки убрать? Там все скобки на месте.
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863197
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
sdkuЕсли внимательно и вдумчиво почитать про транзакции,то Ваша задача довольно просто решается\\

Не поверите, читал и неоднократно, сделал именно так, как написано, но не работает. Выбрасывает по ошибке, но ничего не откатывает.
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863205
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
ПанургIFKЧто не так или чего я недопонимаю?смотри в FAQ/MS Access/Как запускать запросы из VBA раздел 2.6

Ага, смотрел и даже делал именно так, как там описано - нифига не откатывается, т.е. записи удаляются, вываливается ошибка при выполнении следующей операции, уходит на обработку ошибок, но удаление в обработке ошибок не откатывается.
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863211
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKДа, ADODB.Connectionну и нахрена мешать всё в кучу? Объекты ADODB, константы DAO. Наименования объектов тоже от DAO.
Трудно сходить по ссылке - 21970695 и там аккуратно переписать?
Или уж если хочется для ADO
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim cnn as ADODB.Connection
Dim blnFlag as Boolean

On Error Goto err
Set cnn =CurrentProject.Connection
cnn .BeginTrans
blnFlag =true
cnn .Execute "DELETE FROM Table"
cnn .Execute "INSERT INTO Table SELECT * FROM Table2"
cnn .CommitTrans
blnFlag =false
Set cnn =Nothing
err:
    if blnFlag then cnn .RollbackTrans
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863212
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKКакие скобки убрать? Там все скобки на месте.От слова "ВСЕ"
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863215
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
ПанургIFKКакие скобки убрать? Там все скобки на месте.От слова "ВСЕ"

А какая разница, со скобками или без? Работает и так и так. Или я чего-то не знаю?
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863220
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKА какая разница, со скобками или без? Работает и так и так. Или я чего-то не знаю?
...
Рейтинг: 0 / 0
Как проверить выполнение SQL инструкции перед записью результатов?
    #39863221
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
ПанургIFKДа, ADODB.Connectionну и нахрена мешать всё в кучу? Объекты ADODB, константы DAO. Наименования объектов тоже от DAO.
Трудно сходить по ссылке - 21970695 и там аккуратно переписать?
Или уж если хочется для ADO
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim cnn as ADODB.Connection
Dim blnFlag as Boolean

On Error Goto err
Set cnn =CurrentProject.Connection
cnn .BeginTrans
blnFlag =true
cnn .Execute "DELETE FROM Table"
cnn .Execute "INSERT INTO Table SELECT * FROM Table2"
cnn .CommitTrans
blnFlag =false
Set cnn =Nothing
err:
    if blnFlag then cnn .RollbackTrans

Вопрос вдогонку: если одна из команд не выполнится из-за таймаута соединения с сервером, откатится ли вся трансакция по ошибке или нет?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как проверить выполнение SQL инструкции перед записью результатов?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]