Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
COM+ транзакция
|
|||
|---|---|---|---|
|
#18+
У меня вот какой вопрос Создаю СОМ+ компонент (TransTest3.ClassTest3), который стучится к Firebird 1.0. (Конечно если Interbase/Firebird в принципе не поддерживает СОМ+ транзакции, тогда вопрос отпадает сам собой) Код: 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. Вызываю этот компонент на странице ASP Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В компоненте в запросе "delete from test_tbl where id > 2" id - заведомо несуществующее поле. По логике, на выходе страницы должно быть "Transaction aborted". Так оно и есть. Однако не происходит отката первого запроса "insert into err_tbl(errors) values('Test String')" - изменения фиксируются. В чем здесь загвоздка? Зараннее благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 13:25 |
|
||
|
COM+ транзакция
|
|||
|---|---|---|---|
|
#18+
Точно не знаю, предполагаю, что 1)первый запрос 1.1 начинается трансзакция 1.2 выполняется insert into err_tbl(errors) values('Test String') 1.3 трансзакция завершается 2) второй запрос 2.1начинается трансзакция 2.2 выполняется delete from test_tbl where id > 2 2.3 ошибка 2.3 трансзакция откатывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 13:52 |
|
||
|
COM+ транзакция
|
|||
|---|---|---|---|
|
#18+
Попробуй так: Public Sub MakeOrder() Dim con As ADODB.Connection On Error GoTo err_handler GetObjectContext.SetAbort Set con = New ADODB.Connection con.Provider = "MSDASQL.1" con.ConnectionString = "DSN=test_errors;User Id=sysdba;Password=masterkey" con.Open '''' Два последовательных запроса con.Execute "insert into err_tbl(errors) values('Test String')" con.Execute "delete from test_tbl where id > 2" getobjectcontexst exit_handler: If Not (con Is Nothing) Then If con.State = adStateOpen Then con.Close Set con = Nothing End If GetObjectContext.SetCompete Exit Sub err_handler: End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 14:35 |
|
||
|
COM+ транзакция
|
|||
|---|---|---|---|
|
#18+
2 Green2: Это очевидно. Вопрос в том, почему два запроса в транзакционном компоненте не выполняются в рамках единой транзакции. ...Вообще предполагаю, что это из-за особенностей реализации транзакций в интербейсе... Но хотелось бы знать наверняка. 2 Antonariy: 1)Зачем вызывать метод SetAbort до того, как вообще что-либо сделано? 2) авторgetobjectcontexst exit_handler: - ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 15:58 |
|
||
|
COM+ транзакция
|
|||
|---|---|---|---|
|
#18+
Вообще как единую транзакцию это можно сделать с помощью методов BeginTrans, CommitTrans, RollBackTrans объекта Connection, т.е. в Вашем случае будет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 17:58 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32449247&tid=2169909]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 362ms |

| 0 / 0 |
