2 Muzzy
Спасибо за ответ.
Хотелось бы узнать еще вот что. Получается что если я перебираю в цикле (while select) записи таблицы и нужные мне кладу в map, то получается что по выходе из цикла все элементы map-a будут ссылаться на одну запись которая была в цикле последней...
А хотелось бы иметь набор отобранных экземпляров записей ...
Т.е. неясно как ведет себя цикл при итерациях. -
1. Создает заново новый экземпляр табличной переменной, а старая освобождается (если, естественно, на неё больше нет ссылок)
2. либо просто грузит новые значения в один и тот же экземпляр.
Подозреваю, что скорее всего второе.
Но в таком случае - есть ли способ гарантированно создать копию, чтобы положить её в map ?
(Это нужно для создания некоего подобия кеша из записей, с возможностью быстрого доступа и обработки)
Я смотрел код в аксапте (3.0 SP 2 ) и, например, в классе
InventCostItemDim
нашел такой пример, но там для каждой строки создается отдельный экземпляр путем нового (!!!) запроса к базе данных :
/*для каждой выбранной строки вызывается этот метод */
protected void loadTrans(InventTrans _inventTrans)
{
InventTrans inventTransCopy;
;
InventTransCopy = inventTrans::findRecId(_inventTrans.RecId,true);
if (inventTransCopy.RecId)
{
mapInventTrans.insert(inventTransCopy.RecId,inventTransCopy);
...
}
но мне кажется это неоптимально - для каждой записи делать отдельный запрос к базе. Гораздо быстрее (что как раз от меня и требуется !) было бы отбирать группу записей и потом обрабатывать, а не дергать их по одной заводя кучу табличных переменных.
Хотя возможно движок аксапты использует кеширование, так что вызов приведенного метода уже не приводит к новому обращению к базе. Но это надо уточнять.
|