AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.09.2006, 09:30   #1  
v.fedorov is offline
v.fedorov
Участник
 
3 / 10 (1) +
Регистрация: 12.09.2006
Адрес: Novokuznetsk
? Проблема с очисткой временной таблицы
Возникла такая проблемка - при очистке временной таблицы путем
TmpTable_DS.first();
TmpTable.clear();
и последующем ее заполнении, при сортировке значений нажатием на шапку столбца в гриде предыдущие значения всплывают откуда-то... то есть пока значения не отсортированы, вид нормальный, но после сортировки в гриде оказываются значения от текущего заполнения временной таблицы + значения, бывшие в ней до очистки.

Проблему обошел следующим способом:
TmpTable_DS.first();
select forupdate TmpTable;
delete_from TmpTable;
однако возник вопрос - возможно, существует более цивилизованный метод очистки временной таблицы? И еще вопрос - может, кто-нибудь знает, за счет чего подобные вещи могут происходить?
Старый 12.09.2006, 09:34   #2  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Вполне нормальный способ очистки - delete_from. Clear() - это только очистка курсора.
Вы видимо заполняли временную таблицу несколько раз, потому и видели несколько предыдущих наборов записей.
Старый 12.09.2006, 09:47   #3  
v.fedorov is offline
v.fedorov
Участник
 
3 / 10 (1) +
Регистрация: 12.09.2006
Адрес: Novokuznetsk
Спасибо.
Старый 12.09.2006, 10:02   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от v.fedorov Посмотреть сообщение
Проблему обошел следующим способом:
TmpTable_DS.first();
select forupdate TmpTable;
delete_from TmpTable;
Я временные таблицы очищаю более элегантно, как мне кажется. Хотя, не факт, что это работает быстрее delete_from tmpTable;

Вот как делаю:
Код:
TmpTable  tmpTableBlank;
;
tmpTable.setTmpData(tmpTableBlank);
//Ну, и если это очищается датасорс на форме, то еще и
tmpTable_ds.research();
Если кто-то сравнит производительность, респект гарантирован!
За это сообщение автора поблагодарили: oip (2).
Старый 12.09.2006, 10:38   #5  
v.fedorov is offline
v.fedorov
Участник
 
3 / 10 (1) +
Регистрация: 12.09.2006
Адрес: Novokuznetsk
Thumbs up
классно, спасибо.

производительность не заценил еще, но код вроде несколько более читабельный.
Старый 12.09.2006, 10:38   #6  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Код:
TmpTable  tmpTableBlank;
;
tmpTable.setTmpData(tmpTableBlank);
//Ну, и если это очищается датасорс на форме, то еще и
tmpTable_ds.research();
PHP код:
static void Job41(Args _args)
{
    
tmpTable  t;
    
tmpTable  t1;
    
int i,j;
;
    for (
j=1;j<=2;j++)
    {
        for (
i=1;i<=2;i++)
        {
            
t.Field1 =i;
            
t.insert();
        }

        
t.setTmpData(t1);
        while 
select t
        
{
           
info (int2str(t.Field1));
        }
     }

В инфолог выводится 1 и 2.
Старый 12.09.2006, 10:49   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Интересно. Такое впечатление, что данные в 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  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
PHP код:
static void Job41(Args _args)
{
    
tmpTable t;
    
int i,j;
    
void clear()
    {
        
tmpTable  empty;
    ;
        
t.setTmpData(empty);
    }
;
    for (
j=1;j<=2;j++)
    {
        for (
i=1;i<=2;i++)
        {
            
t.Field1 =i;
            
t.insert();
        }

        
clear();
        while 
select t
        
{
           
info (int2str(t.Field1));
        }
     }

А вот так - все нормально. Так что осторожнее.

Последний раз редактировалось oip; 12.09.2006 в 10:53.
Старый 12.09.2006, 10:55   #9  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от AndyD Посмотреть сообщение
Интересно. Такое впечатление, что данные в t и t1 меняются местами.
Нет, не меняются. Просто t1 не очищается.

PS belugin, спасибо за подсказку.

Последний раз редактировалось oip; 12.09.2006 в 11:00.
Старый 12.09.2006, 10:57   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Действительно, получается, что метод 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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от oip Посмотреть сообщение
Нет, не меняются.

PS belugin, спасибо за подсказку.
Да, я понял, смотри выше
__________________
Axapta v.3.0 sp5 kr2
Старый 12.09.2006, 11:05   #12  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
В общем, способ c setTmpData работает, и работает гораздо быстрее, чем с delete_from:
для 20000 строк setTmpData очищает за 200мс, а delete_from - за 20000мс!

Цитата:
Сообщение от AndyD Посмотреть сообщение
Да, я понял, смотри выше
Я уже увидел, после того, как написал.

Последний раз редактировалось oip; 12.09.2006 в 11:08.
Старый 13.09.2006, 11:57   #13  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Я использую tmpTable = null. Никаких побочных эффектов не обнаружил. Если кто знает о таковых - просьба поделиться
За это сообщение автора поблагодарили: leshy (1), kashperuk (2).
Старый 26.10.2006, 23:02   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Наткнулся сегодня на занимательный фрагмент: (в аттаче)
Так что, должны были уже это знать мы все, господа.
Миниатюры
Нажмите на изображение для увеличения
Название: SetTmpData.JPG
Просмотров: 635
Размер:	54.7 Кб
ID:	2195  
Теги
временная таблица, как правильно, очистка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Помещение временной таблицы в Map Lemming DAX: Программирование 20 19.10.2017 14:16
Передача временной таблицы в batch DTD DAX: Программирование 10 30.04.2008 13:55
Динамическое связывание временной таблицы Paul_ST DAX: Программирование 8 25.09.2007 16:17
Проблема - Две одинаковые таблицы в запросе NAST DAX: Программирование 0 13.10.2005 08:51
Можно ли вообще сделать JOIN временной таблицы и InventDim??? Maxim Gorbunov DAX: Программирование 9 05.03.2005 10:39
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:15.