Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
Всем добрых суток! Стоит следующая задача: По событию провести несколько последовательных запросов Insert или Update, но в случае чего - с откатом изменений. Что-то типа транзакции. Пытался сделать таким образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В этом случае, если первый запрос выполнился, а второй заклинило, то выскакивает исключение, но первый уже выполнился, что не допустимо для задачи.. Прочитал что надо использовать связку: BEGIN;COMIT;ROLLBACK; Но нигде не нашёл как использовать, мысли такие: вариант 1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вариант 2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Укажите верный путь, как надо использовать подобные вещи, если можно пример. СУБД postgres, среда Borland 2009 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 08:47 |
|
||
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
RTFM TADOConnection.BeginTrans, CommitTrans, RollbackTrans. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 11:53 |
|
||
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
Midgard90Прочитал что надо использовать связку: BEGIN;COMIT;ROLLBACK; Но нигде не нашёл как использовать, мысли такие: Вариант 2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Так вот так вот (как выше, Вариант 2) и надо их использовать. Только там наверное не add надо вызывать, а set или что-то такое. Или Код: plaintext 1. 2. 3. 4. 5. 6. т.е. запрос, который уже выполнился, должен из adoquery удаляться. Midgard90вариант 1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. т.е. тут идея в том, чтобы сформировать пачку из нескольких запросов, и выполнить их скопом. Это тоже возможно, и в принципе от варианта 2 это ничем не отличается в смысле транзакций, за исключением двух моментов: выполнять по одному оператору удобнее. не все СУБД позволяют сформировать батч (пачку операторов SQL) для посылки в СУБД для выполнения, и во всех СУБД это делается по-разному. Как -- надо смотреть в документации по СУБД и может быть по используемому CLAPI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 12:08 |
|
||
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovRTFM TADOConnection.BeginTrans, CommitTrans, RollbackTrans. Идея этого API в том, чтобы вместо операторов типа START TRANSACTION COMMIT ROLLBACK использовать вызовы этих функций. Это имеет смысл, поскольку операторы управления транзакциями бывают в разных СУБД немного разными, поэтому использование этих функций имеет смысл, особенно для кросс-СУБД-шных приложений. Но в принципе они делают то же самое, что и соотв. операторы языка SQL данной СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 12:10 |
|
||
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
Да, не думал что всё довольно просто. Как поступил: ADOQuery привязал к ADOConnection, через него изначально шли все значимые запросы. В коде сделал следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. На удивление чётко сработало, без рукоблудства в коде. Проверил нарочной ошибкой в запросе. Спасибо за помощь! Весьма признателен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 13:38 |
|
||
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
Midgard90На удивление чётко сработало, без рукоблудства в коде.хранимую процедуру на сервере что помешало написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 13:48 |
|
||
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
Midgard90В коде сделал следующее:... Зачем тебе тут транзакция если RollbackTrans() никогда не сработает? Т.к. каждый запрос в свой try...catch обернут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 14:02 |
|
||
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
Midgard90Да, не думал что всё довольно просто. Как поступил: ADOQuery привязал к ADOConnection, через него изначально шли все значимые запросы. В коде сделал следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. На удивление чётко сработало, без рукоблудства в коде. Проверил нарочной ошибкой в запросе. Спасибо за помощь! Весьма признателен! try/catch-а хватит и одного на весь блок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 14:05 |
|
||
|
Организация нескольких последовательных запросов в транзакции
|
|||
|---|---|---|---|
|
#18+
Dima TЗачем тебе тут транзакция если RollbackTrans() никогда не сработает? Т.к. каждый запрос в свой try...catch обернут.то есть, думаешь, throw из catch-блока очень сложно сделать, да? )) Хотя, конечно, лучше так: MasterZivtry/catch-а хватит и одного на весь блок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 14:11 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=49&tid=2019074]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 287ms |
| total: | 428ms |

| 0 / 0 |
