|
|
|
Как не допустить ошибку при повторном cnn.Begintrans (или Commit/rollback без begin)
|
|||
|---|---|---|---|
|
#18+
Посоветуйте : как не запутаться с cnn.Begintrans : Точнее как узнать , что она уже выдавалась, чтобы не было ошибки при такой последовательности команд : (Здесь cnn - ADO connection.) cnn.Begintrans cnn.Begintrans желательно обойтись без on error ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 20:26:14 |
|
||
|
Как не допустить ошибку при повторном cnn.Begintrans (или Commit/rollback без begin)
|
|||
|---|---|---|---|
|
#18+
1) Обработку ошибок религия запрещает? В VB(VBA) - зачастую это нормальный штатный приём. Если бы программа была написана на C - было бы иначе, в коде возврата любой COM функции имеются флажки ошибок и код ошибки, как и в обычнвх API функциях. в VB (VBA) исключение возбуждается не вызываемой функцией, в вызывающим кодом. 2) Перестроить структуру программы, забыть про аксессовские вложенные транзакции, в таком виде их нет ни MSSQL ни в Оракле.информация о неудаче при выполнении пользовательских процедур и функции должна возвращаться вызывающему через коды возврата, выходные параметрами или через исключения, либо всю логику перенести на сервер и использовать все особенности управления транзакциями соответствующего сервера(именованные контрольные точки, автономные транзакции и тп) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2005, 11:07:51 |
|
||
|
Как не допустить ошибку при повторном cnn.Begintrans (или Commit/rollback без begin)
|
|||
|---|---|---|---|
|
#18+
1) Обработку ошибок религия запрещает? Да обработку ошибок не религия запрещает , а порой принципы оптимального построения программы. Только не поймите, что для всех случаев жизни говорю, Но как раз бывает, и это сечас так случилось, что легче не тратиться на аккуратное отслеживание в алгоритме всех начал транзакций, чтобы каждому соответсвовала своя закрывающая скобка, а перед закрывающей скобкой анализировать - была открыта транзакция или нет, видимо такое в VB невозможно. - только через ON ERROR ... ( как сейчас , собственно , и сделано.) в VB (VBA) исключение возбуждается не вызываемой функцией, в вызывающим кодом. Ну тут я или не понял, что сказано, или не согласен, впрочем это , как- то мне не очень важно. 2) Перестроить структуру программы, забыть про аксессовские вложенные транзакции, Ну вроде как, вопрос так не стоял, ведь из него разве следует, что структура программы плоха ? Вообще этот пункт, мне кажется, к вопросу отношения не имеет. Вопрос : Есть алгоритм, в нем вначале стоит(или не стоит, в зависимости от условий) cnn.Begintrans , на выходе надо сделать(ну или не сделать, в зависимости от тех же условий) cnn.Committrans (cnn.Rollbacktrans) Так вот , чтобы не анализировать перед cnn.Committrans (cnn.Rollbacktrans) упомянутые выше зависимости от условий (анализ может оказаться довольно сложным, ну или не сложным , но не красиво нагружать алгоритм еще и этим ) , и приходится перед cnn.Committrans (cnn.Rollbacktrans) обрабатывать ошибку, но это тоже путь сложнее, чем могло бы быть , если бы , скажем в ADODB.COnnection существовал флажок - транзакция начата/окончена . Но раз такого флажка нет - то и ответ на вопрос, видимо будет - нельзя без ON ERROR . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2005, 14:33:59 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32890958&tid=1668946]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 358ms |

| 0 / 0 |
