09.04.2008, 11:31 | #1 |
Участник
|
Ошибка обновления строк в трехзвенке
Проблема следующая. Глюк воспроизводится в Axapta 3.0 только в трехзвенке и только с базой MS SQK2K5.
Axapta 3.0 SP4 KR3 MSSQL2K5 (Microsoft SQL Server Enterprise Edition 9.0.3228) AOS - Windows 2000 Advanced Server SP4 (MDAC 2.8 SP1) Периодически в разных местах возникает стандартное сообщение о том, что запись была обновлена на другом комьютере, нажмите Восстановить и т.д. и т.п. Чаще всего эта проблема наблюдается при редактировании таблиц на DataSource'ах которых перекрыт метод active и в нем выполняются тяжеловесные операции. Был проведен эксперимент. Создал новую таблицу с несколькими полями.Никаких свойств больше не менял. Создал новую форму и положил на нее грид для редактирования этой таблицы. Далее перехватил на DataSource метод active и добавил некий "тормоз": X++: public int active() { int ret; int a = timenow(); ret = super(); while (timenow()<=a){} return ret; } P.S. Включать в базе режим совместимости с SQL2000 еще не пробовал, но не хотелось бы делать downgrade. |
|
09.04.2008, 11:41 | #2 |
Участник
|
Цитата:
Вынесите их на отдельную кнопку. Про "глюк" - ищите в ваших "тяжеловесных операциях" метод update. Ваша ошибка в том, что в момент ПРОСМОТРА вы делаете ОБНОВЛЕНИЕ. Перенесите обновление записи в метод write и "глюк" волшебным образом исчезнет. |
|
09.04.2008, 11:54 | #3 |
Участник
|
Все бы хорошо, но иногда глючит и стандарные операции. Например редактирование номенклатурного справочника. Кроме того, это не решение проблемы. В вышеприведенном примере я не делал ничего запрещенного, а глюк вылез.
|
|
09.04.2008, 12:06 | #4 |
Member
|
В масштабах предприятия вы от него и не избавитесь. Что у вас за справочник, что вы его постоянно обновляете? Да еще и так интенсивно. Он обновляется только из интерфейса, или из кода тоже?
Этот глюк постоянно вылазит, если на таблице включен Entire table cache. Я иногда на время интенсивной настройки системы снимаю кэширование со справочников даже. Он у меня воспроизводился на всех версиях 3.0 на MS SQL 2000.
__________________
С уважением, glibs® |
|
09.04.2008, 12:21 | #5 |
Участник
|
Цитата:
Кэш для этих таблиц выключен. Более того, возвращаясь к моему тестовому примеру: 1. Там кэша нет. 2. С таблицей работаю только я и в одном окне при этом ошибка возникает. |
|
12.03.2009, 17:52 | #6 |
Участник
|
Только пофиксил баг. Ох и крови он попил. А проблема была в том, что при активном использовании прямых SQL-запросов в них для работоспособности нужно указывать директиву "set nocount on". Вот мы и указывали, а выключать "set nocount off" забывали (не знали).
Дальше лучше. Такие сессии SQL-сервера случайным образом выделяль AOS-ом ни в чем не повинным пользователям (АОС SQL-сессии не закрывает, а выдает при надобности) и выдавали сообщение о невозможности сохранить запись (оновлена другим пользователем) в самых безобидных случаях. На произвольных таблицах и формах. Более того, проблемы возникали и в толстом клиенте, но намного реже. Реже использовался функционал "set nocount on". |
|
|
За это сообщение автора поблагодарили: mazzy (2), oip (1). |
10.09.2019, 09:56 | #7 |
Участник
|
Цитата:
Просто догадались ? |
|
10.09.2019, 11:16 | #8 |
Участник
|
Это давно было в Ax 3.0. Пользователи жаловались на странные сообщения про невозможность обновить строку, которую только этот пользователь и правил.
Диагностировал на системе без пользователей на форме на которой из необычного было только вызов хранимки MSSQL для заполнения вспомогательных строк в строках кастомного журнала. |
|