![]() |
#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 |
Участник
|
Наткнулся сегодня на занимательный фрагмент: (в аттаче)
Так что, должны были уже это знать мы все, господа. ![]() |
|
Теги |
временная таблица, как правильно, очистка |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|