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