28.09.2006, 08:59 | #1 |
Программист
|
Транзакции
Всем здрасте
у меня например есть два метода m1 и m2 m1() { ttsbegin; m2(); <some_update_operation> ttscommit; } m2() { <few_insert_update_operations> } Вопрос вот в чем если у меня произошла ошибка в методе два (не прошел запрос insert) пройдем ли запрос в методе один и (или) выполнится ли откат? ВОпрос 2 - в каком (примерное) случае такое может произойти - запрос из метода 1 прошел а из метода два нет? Заранее спасибо за ответ |
|
28.09.2006, 09:07 | #2 |
Участник
|
1. при эксепшинах происходит ttsAbort
2. не должно |
|
28.09.2006, 09:48 | #3 |
Участник
|
mozhet takoe bit', esli delajetsa ExceptionHandling
try { m1(); } catch {} try { m2(); } catch {} |
|
28.09.2006, 10:00 | #4 |
Программист
|
Угу - счас вот сижу изучаю код чтобы всунуть обработку исключений куда надо
Интересно почему никто не любит документировать свой код |
|
28.09.2006, 10:15 | #5 |
Участник
|
It is Axapta! :P
|
|
28.09.2006, 10:48 | #6 |
Пенсионер
|
Цитата:
Хотя есть уникумы, которые на попадают под эту категорию и я одного такого знаю...
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
28.09.2006, 11:26 | #7 |
Участник
|
Хороший код документирует сам себя. И примеров такого кода достаточно много в Аксапта, особенно в слое SYS. После достаточной практики программирования в Аксапта у меня, например, не возникает проблем с отсутствием документирования кода.
|
|
28.09.2006, 11:46 | #8 |
MCTS
|
Согласен с petr
Тем более, что не известен уровень детализации документирования. Иному "читателю" хоть простыню комментариев напиши - всё без толку. Тогда и техническое задание в комментарии кода пихать надо. Цитата:
После достаточной практики программирования в Аксапта
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
28.09.2006, 13:02 | #9 |
Модератор
|
В Axapta был применен принип рефакторинга - когда код сам по себе является комментарием. Поэтому НИКОГДА не называйте свои переменные a,b,c, myTbl - лучше полными именами.
(это я не про пример, просто так - напоминание ) С Уважением, Георгий |
|
28.09.2006, 13:05 | #10 |
Участник
|
>>>принип рефакторинга
но не до конца. очень много длинных методов |
|
28.09.2006, 13:47 | #11 |
Участник
|
|
|
28.09.2006, 14:07 | #12 |
Программист
|
Еще такой вопросик
Как узнать - прошел запрос или нет? Просто метод insert - void |
|
28.09.2006, 14:09 | #13 |
Участник
|
после вставки записи в таблицу ей присваивается идентификатор записи, в народе, RecId
Вот если он ненулевой, значит прошел |
|
28.09.2006, 14:36 | #14 |
Программист
|
А если я два раза сделаю инсерт?
Например Table1.f1 = 1; Table1.f2 = 2; Table1.insert(); Table1.f3 = 1; Table1.f4 = 2; Table1.insert(); В данном случае Что будет с RecID? Обнуляется ли он перед выполнением запроса? ЗЫ Зачем так делать не спрашивайте Так оно есть |
|
28.09.2006, 14:45 | #15 |
Программист
|
Ой - ступил Сорри
|
|
28.09.2006, 14:55 | #16 |
Модератор
|
перед заполнением табличной переменной надо делать clear() и initValue() - не забывай! на ините - код может лежать.
Георгий |
|
28.09.2006, 15:07 | #17 |
Программист
|
А по каким причинам может не сработать метод insert()?
|
|
28.09.2006, 15:12 | #18 |
Программист
|
ПРосто например в примере выше - я полям таблицы понаприсваивал кучу всего и запустил этот метод
Если я что то не то присвоил - мне поругается компилятор Если же дело дошло до инсерта - что может помешать ему выполнится? |
|
28.09.2006, 15:25 | #19 |
Axapta
|
может быть перекрыт метод insert на таблицы. Если нужно в обход этого записать - doInsert используется.
|
|
28.09.2006, 15:49 | #20 |
Программист
|
Я наверное замучил вас, но еще вопросик
у меня есть так 1-й пользователь ttsbegin; table1.f1 = 2; table1.f2 = 3; table1.insert(); ttscommit; 2-й пользователь ttsbegin; SELECT FORUPDATE table1 WHERE table1.initials =='JD'; table1.name == 'Jane Doe'; table1.insert(); ttscommit; Первый пользователь только начал транзакцию, заполнил поля но не сделал еще инсерт Сможет ли второй польватель начать транзакцию и открыть таблицу? Сможет ли он обновить данные? И что будет у первого пользователя если он в момент обновления вторым пользователем (на таблице по идее блокировка) он попытается сделать инсерт? |
|