12.09.2006, 09:30 | #1 |
Участник
|
Проблема с очисткой временной таблицы
Возникла такая проблемка - при очистке временной таблицы путем
TmpTable_DS.first(); TmpTable.clear(); и последующем ее заполнении, при сортировке значений нажатием на шапку столбца в гриде предыдущие значения всплывают откуда-то... то есть пока значения не отсортированы, вид нормальный, но после сортировки в гриде оказываются значения от текущего заполнения временной таблицы + значения, бывшие в ней до очистки. Проблему обошел следующим способом: TmpTable_DS.first(); select forupdate TmpTable; delete_from TmpTable; однако возник вопрос - возможно, существует более цивилизованный метод очистки временной таблицы? И еще вопрос - может, кто-нибудь знает, за счет чего подобные вещи могут происходить? |
|
12.09.2006, 09:34 | #2 |
NavAx
|
Вполне нормальный способ очистки - delete_from. Clear() - это только очистка курсора.
Вы видимо заполняли временную таблицу несколько раз, потому и видели несколько предыдущих наборов записей. |
|
12.09.2006, 09:47 | #3 |
Участник
|
Спасибо.
|
|
12.09.2006, 10:02 | #4 |
Участник
|
Цитата:
Вот как делаю: Код: TmpTable tmpTableBlank; ; tmpTable.setTmpData(tmpTableBlank); //Ну, и если это очищается датасорс на форме, то еще и tmpTable_ds.research(); |
|
|
За это сообщение автора поблагодарили: oip (2). |
12.09.2006, 10:38 | #5 |
Участник
|
классно, спасибо.
производительность не заценил еще, но код вроде несколько более читабельный. |
|
12.09.2006, 10:38 | #6 |
Axapta
|
Цитата:
PHP код:
|
|
12.09.2006, 10:49 | #7 |
Участник
|
Интересно. Такое впечатление, что данные в t и t1 меняются местами.
PS Нет. При втором вызове t.setTmpData(t1); к данным в курсоре t добавляются данные из курсора t1. Можно удалить с помощью delete_from t1 из этого курсора все данные, тогда будет происходить замена
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 12.09.2006 в 10:57. |
|
12.09.2006, 10:50 | #8 |
Axapta
|
PHP код:
Последний раз редактировалось oip; 12.09.2006 в 10:53. |
|
12.09.2006, 10:55 | #9 |
Axapta
|
Нет, не меняются. Просто t1 не очищается.
PS belugin, спасибо за подсказку. Последний раз редактировалось oip; 12.09.2006 в 11:00. |
|
12.09.2006, 10:57 | #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. Причина: Дополнение |
|
12.09.2006, 11:01 | #11 |
Участник
|
Да, я понял, смотри выше
__________________
Axapta v.3.0 sp5 kr2 |
|
12.09.2006, 11:05 | #12 |
Axapta
|
В общем, способ c setTmpData работает, и работает гораздо быстрее, чем с delete_from:
для 20000 строк setTmpData очищает за 200мс, а delete_from - за 20000мс! Я уже увидел, после того, как написал. Последний раз редактировалось oip; 12.09.2006 в 11:08. |
|
13.09.2006, 11:57 | #13 |
Developer
|
Я использую tmpTable = null. Никаких побочных эффектов не обнаружил. Если кто знает о таковых - просьба поделиться
|
|
|
За это сообщение автора поблагодарили: leshy (1), kashperuk (2). |
26.10.2006, 23:02 | #14 |
Участник
|
Наткнулся сегодня на занимательный фрагмент: (в аттаче)
Так что, должны были уже это знать мы все, господа. |
|
Теги |
временная таблица, как правильно, очистка |
|
|