|
|
|
Транзакции
|
|||
|---|---|---|---|
|
#18+
Народ, я бы уверен что оборачиваю критические процессы обновления таблиц правильно, но вот нарвался на проблему, которая заставила взглянуть по-другому на эти вещи. Решение конечно найдено, но кто подскажет как правильно обернуть процесс обновления трех таблиц Table1, Table2, Table3 транзакцией, что в случае какого-нибудь сбоя, все изменения в этих трех таблицах, будут откатаны... Втт примерно мой подход: Кнопка, на ней 2 метода Click() Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 17:09 |
|
||
|
Транзакции
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. В случае неудачи, команда TableUpdate() - НЕ выбрасывает сообщение об ошибке. Она просто возвращает .F. Молча. Без визуальных спец.эффектов. В буферизированной таблице команды вставки INSERT-SQL, как правило, также не генерят ошибок, поскольку не отрабатывают триггера на вставку. Хотя, конечно, отработают RULE и DEFAULT, но как-то сомнительно, что будут вставляться заведомо некорректные данные. ROLLBACK откатит буфер таблиц в то состояние, которое было на момент подачи команды BEGIN TRANSACTION. Поэтому, дополнительный откат буфера по TableRevert() обычно не нужен (хотя и не помешает. Были глюки с буферами в подобных ситуациях) Таким образом, событие Error(), скорее всего, вообще не отработает. Даже если в процессе сохранния будут ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 17:59 |
|
||
|
Транзакции
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. В случае неудачи, команда TableUpdate() - НЕ выбрасывает сообщение об ошибке. Она просто возвращает .F. Молча. Без визуальных спец.эффектов. В буферизированной таблице команды вставки INSERT-SQL, как правило, также не генерят ошибок, поскольку не отрабатывают триггера на вставку. Хотя, конечно, отработают RULE и DEFAULT, но как-то сомнительно, что будут вставляться заведомо некорректные данные. ROLLBACK откатит буфер таблиц в то состояние, которое было на момент подачи команды BEGIN TRANSACTION. Поэтому, дополнительный откат буфера по TableRevert() обычно не нужен (хотя и не помешает. Были глюки с буферами в подобных ситуациях) Таким образом, событие Error(), скорее всего, вообще не отработает. Даже если в процессе сохранния будут ошибки. Поэтому, дополнительный откат буфера по TableRevert() обычно не нужен (хотя и не помешает. Были глюки с буферами в подобных ситуациях) Именно вот это у меня и произошло...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 00:01 |
|
||
|
Транзакции
|
|||
|---|---|---|---|
|
#18+
Valerii[quot ВладимирМ] Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. В случае неудачи, команда TableUpdate() - НЕ выбрасывает сообщение об ошибке. Она просто возвращает .F. Молча. Без визуальных спец.эффектов. В буферизированной таблице команды вставки INSERT-SQL, как правило, также не генерят ошибок, поскольку не отрабатывают триггера на вставку. Хотя, конечно, отработают RULE и DEFAULT, но как-то сомнительно, что будут вставляться заведомо некорректные данные. ROLLBACK откатит буфер таблиц в то состояние, которое было на момент подачи команды BEGIN TRANSACTION. Поэтому, дополнительный откат буфера по TableRevert() обычно не нужен (хотя и не помешает. Были глюки с буферами в подобных ситуациях) Таким образом, событие Error(), скорее всего, вообще не отработает. Даже если в процессе сохранния будут ошибки. Снова проверил, не совсем так, я вставил специально ошибочно вставку: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 00:15 |
|
||
|
Транзакции
|
|||
|---|---|---|---|
|
#18+
Hi Владимир! Там всё боле запущено - ошибка явно генерится строкой a = b * k - хотя для наглядности стоило просто написать там ERROR "Тут явно вызовем ошибку". Мне не нравятся схемы, когда ROLLBACK и END TRANSACTION разнесены в разные методы - вообще если позволяет версия, то наверное стоит использовать в таких случаях try ... catch ... finally ... endtry - чтобы гарантированно не вывалится из метода (в тот-же Error event например или того хуже в глобальный ON ERROR) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 03:00 |
|
||
|
Транзакции
|
|||
|---|---|---|---|
|
#18+
ValeriiНарод, я бы уверен что оборачиваю критические процессы обновления таблиц правильно, но вот нарвался на проблему, которая заставила взглянуть по-другому на эти вещи... Если интересно, то можете посмотреть sp_message_delete я привожу данную процедуру два раза - первый раз с TRY..CATCH , второй для VFP 9.1 OLE DB Provider - без данной полезной возможности... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 09:25 |
|
||
|
Транзакции
|
|||
|---|---|---|---|
|
#18+
Sergey Ch ValeriiНарод, я бы уверен что оборачиваю критические процессы обновления таблиц правильно, но вот нарвался на проблему, которая заставила взглянуть по-другому на эти вещи... Если интересно, то можете посмотреть sp_message_delete я привожу данную процедуру два раза - первый раз с TRY..CATCH , второй для VFP 9.1 OLE DB Provider - без данной полезной возможности... Good luck! http://sp_message_delete не работает... ошибка в линке.... Плз, елси можно, хочеться посмотреть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 10:11 |
|
||
|
Транзакции
|
|||
|---|---|---|---|
|
#18+
Valerii http://sp_message_delete не работает... ошибка в линке.... Плз, елси можно, хочеться посмотреть... Исправленная ссылка Sorry, for any inconveniences... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 10:47 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=252&tid=1591459]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
301ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
2ms |
| others: | 202ms |
| total: | 559ms |

| 0 / 0 |
