|
|
#1 |
|
Участник
|
Возникла такая проблемка - при очистке временной таблицы путем
TmpTable_DS.first(); TmpTable.clear(); и последующем ее заполнении, при сортировке значений нажатием на шапку столбца в гриде предыдущие значения всплывают откуда-то... то есть пока значения не отсортированы, вид нормальный, но после сортировки в гриде оказываются значения от текущего заполнения временной таблицы + значения, бывшие в ней до очистки. Проблему обошел следующим способом: TmpTable_DS.first(); select forupdate TmpTable; delete_from TmpTable; однако возник вопрос - возможно, существует более цивилизованный метод очистки временной таблицы? И еще вопрос - может, кто-нибудь знает, за счет чего подобные вещи могут происходить? |
|
|
|
|
#2 |
|
NavAx
|
Вполне нормальный способ очистки - delete_from. Clear() - это только очистка курсора.
Вы видимо заполняли временную таблицу несколько раз, потому и видели несколько предыдущих наборов записей. |
|
|
|
|
#3 |
|
Участник
|
Спасибо.
|
|
|
|
|
#4 |
|
Участник
|
Цитата:
Вот как делаю: Код: TmpTable tmpTableBlank; ; tmpTable.setTmpData(tmpTableBlank); //Ну, и если это очищается датасорс на форме, то еще и tmpTable_ds.research();
|
|
|
|
| За это сообщение автора поблагодарили: oip (2). | |
|
|
#5 |
|
Участник
|
классно, спасибо.
производительность не заценил еще, но код вроде несколько более читабельный. |
|
|
|
|
#6 |
|
Axapta
|
Цитата:
PHP код:
|
|
|
|
|
#7 |
|
Участник
|
Интересно. Такое впечатление, что данные в t и t1 меняются местами.
PS Нет. При втором вызове t.setTmpData(t1); к данным в курсоре t добавляются данные из курсора t1. Можно удалить с помощью delete_from t1 из этого курсора все данные, тогда будет происходить замена
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 12.09.2006 в 10:57. |
|
|
|
|
#8 |
|
Axapta
|
PHP код:
Последний раз редактировалось oip; 12.09.2006 в 10:53. |
|
|
|
|
#9 |
|
Axapta
|
Нет, не меняются. Просто t1 не очищается.
PS belugin, спасибо за подсказку.
Последний раз редактировалось oip; 12.09.2006 в 11:00. |
|
|
|
|
#10 |
|
Участник
|
Действительно, получается, что метод setTmpData работает немного иначе, чем представлялось - похоже на присваивание курсора курсору.
Так что, вооружившись этим новым знанием, использовать придется с учетом такого его ограничения. Спасибо oip за замечание. P.S. Кстати, почитав хелп в Axapta действительно можно было увидеть это, вчитавшись в слово point (указывать): Код: Example
TmpTbl t1
TmpTbl t2
t2.setTmpData(t1); /*both buffers now point to same
/*dataПоследний раз редактировалось kashperuk; 12.09.2006 в 11:06. Причина: Дополнение |
|
|
|
|
#11 |
|
Участник
|
Да, я понял, смотри выше
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#12 |
|
Axapta
|
В общем, способ c setTmpData работает, и работает гораздо быстрее, чем с delete_from:
для 20000 строк setTmpData очищает за 200мс, а delete_from - за 20000мс! Я уже увидел, после того, как написал.
Последний раз редактировалось oip; 12.09.2006 в 11:08. |
|
|
|
|
#13 |
|
Developer
|
Я использую tmpTable = null. Никаких побочных эффектов не обнаружил. Если кто знает о таковых - просьба поделиться
|
|
|
|
| За это сообщение автора поблагодарили: leshy (1), kashperuk (2). | |
|
|
#14 |
|
Участник
|
Наткнулся сегодня на занимательный фрагмент: (в аттаче)
Так что, должны были уже это знать мы все, господа.
|
|
|
| Теги |
| временная таблица, как правильно, очистка |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|