AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.11.2009, 10:07   #1  
/Antony/ is offline
/Antony/
Программист
 
14 / 12 (1) ++
Регистрация: 01.08.2007
вхолостую считано n записей - Какова причина?
Доброго времени суток, уважаемые аксаптоведы.

В логах АОСа имеется запись следующего вида (ну и куча ей подобных):
Код:
База данных: Microsoft SQL Server
Предупреждение: Из таблицы "RAssetStandards" вхолостую считано 2 записей. Попробуйте использовать ключевое слово FIRSTONLY или составьте более точный запрос WHERE. [W-0101]
Стек вызовов:
(S) \Classes\RAssetPost\updateStatus - line 50
(S) \Classes\RAssetPost_Depreciation\updateStatus - line 32
...
Сколько ни пытался - не удалось самому сформировать код X++, приводящий к аналогичной записи в логе. Не могу понять природу возникновения таких записей, чтоб победить проблему. Пожалуйста, подскажите возможные причины.

PS: Ax v 3.0
Старый 05.11.2009, 11:58   #2  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Прошаривание по RAssetStandards и doUpdate() сначала в переопределенном методе, потом в вызове родительского метода ...
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 05.11.2009, 12:10   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вот такая конструкция вызывает соответствующий варнинг
X++:
while select AccountNum from VendTable
{
    break;
}
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: /Antony/ (1).
Старый 05.11.2009, 13:03   #4  
/Antony/ is offline
/Antony/
Программист
 
14 / 12 (1) ++
Регистрация: 01.08.2007
Цитата:
Сообщение от AndyD Посмотреть сообщение
Вот такая конструкция вызывает соответствующий варнинг
X++:
while select AccountNum from VendTable
{
    break;
}
Не удалось получить варнинг, сам тоже пробовал уже этот способ... хм...может там еще требуются какие-нить отягосчающие обстоятельства)))...
Старый 05.11.2009, 13:25   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от /Antony/ Посмотреть сообщение
Не удалось получить варнинг, сам тоже пробовал уже этот способ... хм...может там еще требуются какие-нить отягосчающие обстоятельства)))...
Попробуйте так
X++:
VendTable.disableCache(true);
while select AccountNum from VendTable
{
    break;
}
возможно кеширование повлияло.
Старый 05.11.2009, 14:26   #6  
/Antony/ is offline
/Antony/
Программист
 
14 / 12 (1) ++
Регистрация: 01.08.2007
Цитата:
Сообщение от Logger Посмотреть сообщение
Попробуйте так
X++:
VendTable.disableCache(true);
while select AccountNum from VendTable
{
    break;
}
Не помогло, проходит гладко
Старый 06.11.2009, 12:51   #7  
/Antony/ is offline
/Antony/
Программист
 
14 / 12 (1) ++
Регистрация: 01.08.2007
Люди, поможите кто чем может. Предложите еще к-нить версии
Старый 06.11.2009, 13:14   #8  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
ну судя по всему обычный select который возвращает больше одной записи без пробега по ним.
например

select salesTable;

if (salesTable)
{
.....
}

конкурс телепатов
Старый 06.11.2009, 13:22   #9  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
http://msdn.microsoft.com/en-us/library/aa854677.aspx
Цитата:
Сообщение от MSDN
XXX records in table 'myTable' retrieved from the database, but never used. Consider using FIRSTONLY, or a more selective WHERE clause.
W-101
A change might not be needed because the client doesn't have to iterate through every record available in the buffer of retrieved records. However, sometimes a more selective WHERE clause can reduce this inefficiency.
Подразумевается, видимо, что клиент считал не просто лишние строчки в таблице, а лишний раз сделал fetch буффера строк (см. параметры buffer size & array fetch ahead в ACU, много раз обсуждалось на форуме).
Соответсвенно надо подыскать ситуацию, когда запрос сделает несколько таких фетчей, для получения выборки (возможно просто табличку взять побольше ), при этом полученные записи никак не использовать...

Ну это не более чем предположение, как вы и просили.
__________________
Zhirenkov Vitaly
Старый 09.11.2009, 13:04   #10  
/Antony/ is offline
/Antony/
Программист
 
14 / 12 (1) ++
Регистрация: 01.08.2007
В итоге выявлено, что данный варнинг возникает в следующем случае:

Цитата:
Сообщение от AndyD Посмотреть сообщение
Вот такая конструкция вызывает соответствующий варнинг
X++:
while select AccountNum from VendTable
{
    break;
}
Правда, почему-то стабильного его появления добиться не удалось, он то появляется на вышеописанную конструкцию, то -нет.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Шаблоны записей из кода sukhanchik DAX: Программирование 5 06.07.2009 17:13
Влияние настройки доступа на уровне записей longson DAX: Функционал 2 15.01.2008 21:29
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Определённая последовательность записей Dymm DAX: Программирование 4 31.08.2005 14:47
Хранение отмеченных записей Pavel Pustovalov DAX: Программирование 9 17.05.2005 21:56

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:59.