Страница 1 из 1
Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 7:57
Admin
В неопределенной ситуации код работает неправильно.
Именно под Windows 7 со всеми обновлениями. Windows Xp и Win Server 2008 все OK!
Clarion 6.3 9058
Код: Выделить всё
...
Queue:Browse.GoodsID = 123
GET(Queue:Browse, Queue:Browse.GoodsID)
IF NOT ERRORCODE()
MESSAGE(POINTER(Queue:Browse)) ! = 0 !!!
Queue:Browse.XXX = YYY
PUT(Queue:Browse)
MESSAGE(ERRORCODE()) ! = 30 !!!
END
...
В печали!

Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 12:01
Губин Игорь
1 (глупый вопрос): а сортировка выполнена?
2 (перестраховочное): а PUT(Queue:Browse, Queue:Browse.GoodsID) не стоит применить?
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 12:12
kreator
Вообще, странно. Может надо очередь сортирнуть по GoodsID. Я сталкивался с некими проблемами, если предварительно не сортирнуть. И, действительно, ошибку не поймать, похоже.
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 12:24
Admin
Губин Игорь писал(а):1 (глупый вопрос): а сортировка выполнена?
нет. очередь бровза MAV. не стоит ее сортировать.
2 (перестраховочное): а PUT(Queue:Browse, Queue:Browse.GoodsID) не стоит применить?
это не пробовал. попробую.
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 12:24
Admin
kreator писал(а):Вообще, странно. Может надо очередь сортирнуть по GoodsID. Я сталкивался с некими проблемами, если предварительно не сортирнуть. И, действительно, ошибку не поймать, похоже.
Основной момент что все на других версия винды стабильно работает а на Win 7 стабильно не работает!
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 12:26
Губин Игорь
Admin писал(а):нет. очередь бровза MAV. не стоит ее сортировать.
Вот в этом и может прятаться Маккейн!
Правильно гет работает только при предварительно выполненной сортировке или когда все add и put выполняются с указанием сортировки.
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 12:40
Губин Игорь
Admin писал(а):Основной момент что все на других версия винды стабильно работает а на Win 7 стабильно не работает!
Ты же не знаешь, что там внутри мав творится. Может как-то специфично обрабатывается.
Могу посоветовать обходной путь через задницу:
Вариант 1: полный проход по всей очереди для поиска
Вариант 2: делаешь промежуточную очередь со ссылками на основную, её сортируешь, а потом правишь нужную запись в основной.
Кстати, Варинат 2 будет и хорошей проверкой на правильность моего предположения.
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 13:57
Дед Пахом
Что-то мне кажется, дело в другом, и не надо искать обходные пути. Код прост как три копейки: при успешном GET(q, q.id) немедленный POINTER(q) возвращает 0, что есть нонсенс. Никто эту очередь в другом потоке не дёргает?
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 16:11
FinSoft
Губин Игорь писал(а):Admin писал(а):нет. очередь бровза MAV. не стоит ее сортировать.
Вот в этом и может прятаться Маккейн!
Правильно гет работает только при предварительно выполненной сортировке или когда все add и put выполняются с указанием сортировки.
Привет, Игорь. Это не совсем так. Если делается гет по другому порядку сортировки, то кларион автоматически строит дополнительный ключ. Так в доке было прописано. По моему опыту проблема может возникнуть при неуникальных значениях в поле, по которому делается гет. Если гет по полю с идентификатором записи, то все работает пучком, независимо от сортировки. Совсем недавно сталкивался.
По сабжу лучше вначале сделать чистый эксперимент - сформировать ручками отдельную очередь с подобной структурой, если работает как надо, попробовать запихать туда похожие значения. Андрей (Мялин) любит использовать нестандартные для клариона схемы, например, может записать в очередь не через add, а каким-нибудь виндовым api. Так хотя бы можно выяснить, откуда ноги растут.
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 17 Декабрь 2013, 17:39
seawolf
Не помню подобных проблем у себя - особенно если id уникален. Но сам всегда автоматом делаю sort перед get при очередях обязательно. Интересно, а как такая конструкция поведет себя на восьмерке?
Re: Windows 7, GET по очереди, POINTER и PUT
Добавлено: 18 Декабрь 2013, 2:34
Admin
Губин Игорь писал(а):2 (перестраховочное): а PUT(Queue:Browse, Queue:Browse.GoodsID) не стоит применить?
Всем спасибо за обсуждение. Этот вариант сработал!
Но тем не менее повторюсь, эта проблема есть только на Windows 7