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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.04.2004, 13:05   #1  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
! Курсоры
Интересует такой вопрос .
Есть курсор после выполнения чего-нибудь (запроса, select'a и т.д.)
Можно ли как-нибудь узнать текущую запись (номер) и кол-во записей в курсоре, не выполняя запрос еще раз.
Старый 09.04.2004, 17:28   #2  
Ned is offline
Ned
Lean Six Sigma
 
680 / 99 (5) ++++
Регистрация: 29.12.2002
Адрес: самолёт
нельзя.
Старый 09.04.2004, 18:02   #3  
RAks is offline
RAks
Участник
 
11 / 10 (1) +
Регистрация: 10.05.2002
static void cursorTest(Args _args)
{
InventTable it;


int i = 0;
;


select it;

while (it.recId != 0)
{
i++;

print(strFmt("%1", it.RecId));

next it;
}


print(strFmt("Всего- %1", i));
}
Старый 09.04.2004, 20:41   #4  
Ned is offline
Ned
Lean Six Sigma
 
680 / 99 (5) ++++
Регистрация: 29.12.2002
Адрес: самолёт
Согласен. Так - можно. Нужно ли?
Старый 12.04.2004, 09:31   #5  
RAks is offline
RAks
Участник
 
11 / 10 (1) +
Регистрация: 10.05.2002
:)
Иногда бывает нужно. Удобно может быть, когда выбирается небольшое количество записей, а не вся InventTable, или еще лучше InventTrans ...
Старый 12.04.2004, 10:01   #6  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Класс! То что надо.
Спасибо большое.
А чтобы в обратном порядке бегать, есть какая-нибудь команда?
Старый 12.04.2004, 11:20   #7  
RAks is offline
RAks
Участник
 
11 / 10 (1) +
Регистрация: 10.05.2002
Не знаю такого
Старый 12.04.2004, 12:11   #8  
france is offline
france
Участник
 
159 / 11 (1) +
Регистрация: 24.11.2003
Адрес: Москва
Цитата:
Изначально опубликовано CDR
А чтобы в обратном порядке бегать, есть какая-нибудь команда?

SELECT REVERSE IT;
хотя, полученный результат для меня был несколько неожиданным))
Старый 12.04.2004, 14:43   #9  
RAks is offline
RAks
Участник
 
11 / 10 (1) +
Регистрация: 10.05.2002
В случае select reverse ... будет новый запрос на сервер. Записи отбираются в курсор в порядке, указанном в запросе, как бегать в обратном направлении по записям курсора не знаю... Может стоит поискать другое решени, зависит от конкретной задачи, БП и его реализации.
Старый 12.04.2004, 15:26   #10  
france is offline
france
Участник
 
159 / 11 (1) +
Регистрация: 24.11.2003
Адрес: Москва
Хотите сказать, что если будет такой код
PHP код:
static void cursorTest(Args _args
{
InventTable             it;    
int                     i 0;    
;    
select  it;    
while (
it.recId != 0)    
 {        
i++;        
         print(
strFmt("%1"it.RecId));        
         
next it;    
 }    
 print 
strFmt("Всего- %1"i)); 

запроса к БД не будет.
А если использовать тот же код но с параметром Reverse в Select:
PHP код:
static void cursorTest(Args _args
{
InventTable             it;    
int                     i 0;    
;    
select reverse it;    
while (
it.recId != 0)    
 {        
i++;        
         print(
strFmt("%1"it.RecId));        
         
next it;    
 }    
 print 
strFmt("Всего- %1"i)); 

то будет запрос к БД?
Старый 12.04.2004, 17:57   #11  
RAks is offline
RAks
Участник
 
11 / 10 (1) +
Регистрация: 10.05.2002
:)
Уж и не знаю, что ответить....
Старый 12.04.2004, 18:03   #12  
RAks is offline
RAks
Участник
 
11 / 10 (1) +
Регистрация: 10.05.2002
france ваше замечание оторвано от контекста темы, вопрос был в переборе записей, уже отобранных в курсор, а не в различных способах выборки записей из БД...
Старый 12.04.2004, 19:11   #13  
france is offline
france
Участник
 
159 / 11 (1) +
Регистрация: 24.11.2003
Адрес: Москва
будем считать, что вне контекста и закроем вопрос.
Старый 12.04.2004, 19:51   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Не выполняя никакого запроса еще раз не получится.
Если вы используете query, можно сильно сократить перебор в запросе за счет использования агреггирующих функций
http://forum.mazzy.ru/index.php?showtopic=300

В select агрегирующие функции надо вписывать вручную.
Старый 13.04.2004, 11:28   #15  
RAks is offline
RAks
Участник
 
11 / 10 (1) +
Регистрация: 10.05.2002
Согласен, Query и QueryRun гораздо удобнее, когда не все параметры известны до момента исполнения логики. При этом, запрос к БД будет формироваться при первом исполнении QueryRun.next() для построенного Query. После изменения Query для уже существующего QueryRun, при первом QueryRun.next() снова будет запрос к БД.
Старый 13.04.2004, 14:50   #16  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Да, однако класс QueryRun также имеет только метод .next().
Получается, что если в курсоре необходимо обратиться
к предыдущим записям, выполняй запрос заново?
Старый 02.07.2004, 16:25   #17  
FishLog is offline
FishLog
Участник
 
30 / 10 (1) +
Регистрация: 17.12.2003
Адрес: Москва
Если не ошибаюсь, то возможность перебирать выборку в одном направлении сделана из соображений производительности.
Так как в сиквеле есть несколько видов курсоров - один может перебирать запись и только в одном направлении, а другой в обоих. Но последний работает значительно медленнее.

В принципе если запись уже выбрана один раз, то для того чтобы к ней вернуться, стоит организовать некое подобие массива ? Получится быстрее.
Старый 02.07.2004, 16:59   #18  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Сомневаюсь.. Или Вы в памяти будете весь массив держать? Приемлемый вариант - временная таблица. А если на диске, то снова запросы...
Старый 02.07.2004, 17:06   #19  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Изначально опубликовано George Nordic
Приемлемый вариант - временная таблица.


Надеюсь это шутка?
Старый 02.07.2004, 17:08   #20  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Временная таблица заполняется оттуда, где будет вставлена 1 запись. Причем не факт, что она будет создана на диске - скорее всего в памяти.

А Вы предлагаете массив?
Теги
курсор, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Eщё приколы про курсоры ZVV DAX: Программирование 4 25.12.2008 00:27

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

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

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