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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.09.2006, 08:45   #1  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Существование следующей записи в запросе
Добрый день! Подскажите как можно узнать о наличии или отсутствии следующей записи в запросе? При этом ее(слудующую запись) выбирать не нужно.
Старый 28.09.2006, 09:19   #2  
Косых Артём is offline
Косых Артём
Участник
Axapta Retail User
 
123 / 77 (3) ++++
Регистрация: 03.09.2004
Адрес: Москва
насколько я могу догадываться, необходимо произвести какие-то действия с текущей записью запроса в зависимости от того существует ли следующая запись.

я бы использовал для этих целей какую-то временную запись и все таки выбирал следующую запись.

можно еще так сделать:
Код:
QueryRun qr, qr2;
;
...
while(qr.next())
{
 qr2 = qr;
 if(qr2.next())
 {
 ...
 }
}
Старый 28.09.2006, 09:26   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Косых Артём Посмотреть сообщение
я бы использовал для этих целей какую-то временную запись и все таки выбирал следующую запись.

можно еще так сделать:
Код:
QueryRun qr, qr2;
;
...
while(qr.next())
{
 qr2 = qr;
 if(qr2.next())
 {
 ...
 }
}
Вообще говоря, так вы передвинете курсор и в qr.
В java все переменные являются ссылками.
qr2 = qr не копирует сам курсор, копируется только ссылка на него.

Кроме того, запрос все равно остается.

По-моему нет способа узнать есть ли следующая запись, не сделав попытку ее получить.
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2006, 09:39   #4  
Косых Артём is offline
Косых Артём
Участник
Axapta Retail User
 
123 / 77 (3) ++++
Регистрация: 03.09.2004
Адрес: Москва
ой. не выспался туплю
Старый 28.09.2006, 09:44   #5  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Nu esli nehochetsja vibirat' zapis' + delaetsja zapros iz koda (gde mozno vstavit svoj kod), to mozno po nomeru stroki opredelit', est'li ese zapis

Код:
Query q2;
QueryRun qr;
QueryRun qr2;

// Schitajem skoka strok
q2 = new Query(q); // q = vas zapros
q2.dataSourceTable(tableNum(...)).fields().clearFieldList();
q2.dataSourceTable(tableNum(...)).addSelectionField(fieldNum(...,recId),selectionfield::Count);
qr2 = new QueryRun(q);
qr2 .next();
Common = qr2.getNum(1);
cnt = Common.recId;

while (qr.next())
{
  if (... & i < cnt)
  {
    // delajem sto-to ili nicego nedelajem
  }

  i++;
}
Hotja esli budet zapis' propuskatsja v seredine (ne prosto delaetsja break), to togda bez FETCH tocno ne poluchitsja

PS: metod rabotajushij,... ispolzujem v odnoj forme dlja podscheta strok + rabotajut vse filtri (tak kak berjotsa sam Query iz Formi)

Последний раз редактировалось Delfins; 28.09.2006 в 09:46.
Старый 28.09.2006, 09:48   #6  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Хорошо, допустим я предприму попытку проверить наличие следующей записи путем ее выбора, а как потом вернуть запрос в то состояние в котором он был до этого?
Старый 28.09.2006, 09:48   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
В java все переменные являются ссылками.
?
Старый 28.09.2006, 09:50   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
PavelSR, а что за задачка, если не секрет? Какое-нибудь скользящее среднее вычисляете? Может быть стоит кардинально алгоритм перетряхнуть? Ну... сделайте там... два запроса, смещенных относительно друг друга на одну запись

_ 1
1 2
2 3
3 4
4 _
Старый 28.09.2006, 09:53   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от PavelSR Посмотреть сообщение
Хорошо, допустим я предприму попытку проверить наличие следующей записи путем ее выбора, а как потом вернуть запрос в то состояние в котором он был до этого?
А зачем ее возвращать?
До того, как передвигать, скопируйте запись в другую переменную (например, при помощи Buf2Buf.

Кроме того, почитайте книжку Еременко и/или BestPractice.
Там советуют выборку делать без модификатора forupdate, а для изменения найти запись еще раз но уже с модификатором forupdate. В общем случае так уменьшается вероятность блокировки.

Сделайте поиск в коде переменной first или found.
Там есть примеры использования.
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2006, 09:55   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
?
FAQ: http://forum.mazzy.ru/index.php?showtopic=310
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2006, 09:56   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Gustav Посмотреть сообщение
Может быть стоит кардинально алгоритм перетряхнуть?
Согласен.
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2006, 10:08   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вообще говоря, так вы передвинете курсор и в qr.
В java все переменные являются ссылками.
qr2 = qr не копирует сам курсор, копируется только ссылка на него.

Кроме того, запрос все равно остается.

По-моему нет способа узнать есть ли следующая запись, не сделав попытку ее получить.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Там написано что всё передается по значению Truth #1: Everything in Java is passed by value
Старый 28.09.2006, 10:12   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
два запроса не обязательно. надо просто буферизовать нужное количество значений и вычислять только когда точно известно два последний значения
Старый 28.09.2006, 10:13   #14  
Косых Артём is offline
Косых Артём
Участник
Axapta Retail User
 
123 / 77 (3) ++++
Регистрация: 03.09.2004
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
Там написано что всё передается по значению Truth #1: Everything in Java is passed by value
Значением переменной qr в моем примере является ссылка на объект QueryRun. Таким образом копируется значение переменной (которое есть ссылка на объект).
Старый 28.09.2006, 10:21   #15  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Esli takoj gemoroj s pereschetami, ja obichno ispolzuju MAP/Container, gde hranju tolko to shto mne nuzno. Potom sootvetstvenno mozhno polzat' po dannim bez ispolzovanija DB.

Konechno vse zavisit ot zadachi - skolko zapisej i t.d.

PS: takze esli mnogo zapisej i nado uznat'tolko nekotorie polja, luce delat' viborku na nekotorie polja select recId, Qty from.. i kak uze skazal Mazzy - dlja update - zanovogo delat' polnuju viborku.
Старый 28.09.2006, 10:27   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Delfins Посмотреть сообщение
ispolzuju MAP/Container
Тут надо помнить об одном - MAP|Container "живет" там, где его создали.
Поэтому создавать и обрабатывать такие контейнеры надо на AOS.
К сожалению, об этом часто забывают.

Работа с подобными структурами на клиенте резко уменьшает производительность и увеличивает трафик между AOS и клиентом.
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2006, 10:33   #17  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Тут надо помнить об одном - MAP|Container "живет" там, где его создали.
Поэтому создавать и обрабатывать такие контейнеры надо на AOS.
К сожалению, об этом часто забывают.

Работа с подобными структурами на клиенте резко уменьшает производительность и увеличивает трафик между AOS и клиентом.
Эээээ.... (c) Не верю.

Забавно это слышать от представителя компании специализирущейся одно время на оптимизации производительности ))

Попробуйте на досуге измерить насколько "резко снизится производительность" от создания мапа на клиенте. В абсолютных и относительных величинах.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/

Последний раз редактировалось Recoilme; 28.09.2006 в 10:38.
Старый 28.09.2006, 10:40   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Recoilme Посмотреть сообщение
Эээээ.... (c) Не верю.

Забавно это слышать от представителя компании специализирущейся одно время на оптимизации производительности ))

Попробуйте на досуге измерить насколько "резко снизится производительность" от создания мапа на клиенте. В абсолютных и относительных величинах.
Не верьте.
Всегда думайте самостоятельно.

Даю маячок: МАП надо не только создавать, но и заполнять чем-то.
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2006, 11:06   #19  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от mazzy Посмотреть сообщение
А зачем ее возвращать?
До того, как передвигать, скопируйте запись в другую переменную (например, при помощи Buf2Buf.

Кроме того, почитайте книжку Еременко и/или BestPractice.
Там советуют выборку делать без модификатора forupdate, а для изменения найти запись еще раз но уже с модификатором forupdate. В общем случае так уменьшается вероятность блокировки.

Сделайте поиск в коде переменной first или found.
Там есть примеры использования.
Дело в том что запрос статический... и поэтому нужно вернуть все на свои места... если я сделаю выборку и не верну на место, то в отчете(используещий данный запрос) пропустится строчка...
Пытаюсь с помощью метода setCursor класса QueryRun но что то не получается:
X++:
    tempTable1 = QueryRun.getNo(1);
    select firstonly * from tempTable2
        where  tempTable2.RecId == tempTable1.RecId;
    if (!QueryRun.next())
    {
    // что то делаем 
        element.execute(33);
    }
    QueryRun.setCursor(tempTable2);
можно ли вообще добиться того чего я хочу?

Последний раз редактировалось PavelSR; 28.09.2006 в 11:17.
Старый 28.09.2006, 11:18   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от PavelSR Посмотреть сообщение
если я сделаю выборку и не верну на место, то в отчете(используещий данный запрос) пропустится строчка...
В отчете используйте вторую переменную.
- Ну, а как ты спишь? Сидя, что ли? - спросила Черепаха.
- Нет, сплю я лёжа. Но когда я сплю, я же не пою!
- А ты представь себе, что ты спишь и поёшь!..
...
- И всё-таки это не по правде, - не открывая глаз, сказал Львёнок. - Ведь я сплю с закрытыми глазами и, значит, солнышко видеть не могу!
- А ты открой глаза, - сказала Черепаха. - И представь, как будто ты спишь с открытыми глазами и поёшь.
...
(С) Львенок и черепаха. http://www.skazka.com.ru/article/koz...002kozlov.html
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Курсор перешел к следующей записи на клиенте, на сервере этого сделать уже нельзя PavelSR DAX: Программирование 22 01.11.2012 07:33
Открытие формы с деталями активной записи в гриде sweeper DAX: Программирование 4 19.09.2008 15:55
ALEG: Доступны записи тренингов по Microsoft Dynamics NAV Blog bot DAX Blogs 0 21.03.2007 15:00
Вытащить записи из InventSum ... Rimantas DAX: Программирование 23 07.11.2006 14:47
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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