|
![]() |
#1 |
Участник
|
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); ... } но мне кажется это неоптимально - для каждой записи делать отдельный запрос к базе. Гораздо быстрее (что как раз от меня и требуется !) было бы отбирать группу записей и потом обрабатывать, а не дергать их по одной заводя кучу табличных переменных. Хотя возможно движок аксапты использует кеширование, так что вызов приведенного метода уже не приводит к новому обращению к базе. Но это надо уточнять. |
|
|
|