Показать сообщение отдельно
Старый 30.09.2008, 00:29   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Ax3sp3 vs Ax4sp2 на примере
Решил зафиксировать результаты небольших опытов, проведенных на приложениях Ax3sp3 и Ax4sp2 подключенных к серверу MS SQL2005 с БД в режиме 90.

В опытах принимают участие: табличка
aTable с полями
Id - int с уникальным индексом
Value - int без индекса

и 2 жобика
X++:
static void Job_b1(Args _args)
{
    aTable  aTable;
    ;

    ttsbegin;
    aTable = aTable::find(12, true); // такая запись есть
    aTable.Value = timenow();
    aTable.update();
    ttscommit;
}

static void Job_b2(Args _args)
{
    aTable  aTable;
    ;

    select aTable
        where aTable.Value == 200; // такой записи нет

    ttsbegin;

    select aTable
        where aTable.Value == 200;

    aTable = aTable::find(12, true);
    aTable.Value = timenow();
    aTable.update();

    ttscommit;
}
Опыт 1
Запускаем 2 клиента аксапты.
В одном из них ставим точку останова на строке aTable.update(); первого джобика и выполняем.
Во втором выполняем джобик2 по шагам.
Ax3sp3 - джобик2 вешается на строке aTable = aTable::find(12, true); до тех пор пока не закончится джоб1.
Ax4sp2 - джоб2 отрабатывает до конца, однако при попытки продолжить джоб1 получаем ошибку:
Невозможно отредактировать запись в aTable (aTable).
Возник конфликт обновления из-за того, что другой пользовательский процесс выполняет удаление записи или изменение одного или нескольких полей в записи.


Опыт 2
Запускаем 2 клиента аксапты.
В одном из них ставим точку останова на строке ttscommit; первого джобика и выполняем.
Во втором выполняем джобик2 по шагам.
Ax3sp3 - на этот раз джобик2 вешается на строке select aTable where aTable.Value == 200; (которая после ttsbegin) до тех пор пока не закончится джоб1.
Ax4sp2 - теперь и здесь джоб2 вешается, но на строке aTable.update(); до тех пор пока не закончится джоб1, а потом выдает туже ошибку:
Невозможно отредактировать запись в aTable (aTable).
Возник конфликт обновления из-за того, что другой пользовательский процесс выполняет удаление записи или изменение одного или нескольких полей в записи.

Последний раз редактировалось Wamr; 30.09.2008 в 00:33.