AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

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

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

можно еще так сделать:
Code:
QueryRun qr, qr2;
;
...
while(qr.next())
{
 qr2 = qr;
 if(qr2.next())
 {
 ...
 }
}
Alt 28.09.2006, 09:26   #3  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von Косых Артём Beitrag anzeigen
я бы использовал для этих целей какую-то временную запись и все таки выбирал следующую запись.

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

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

По-моему нет способа узнать есть ли следующая запись, не сделав попытку ее получить.
__________________
полезное на axForum, github, vk, coub.
Alt 28.09.2006, 09:39   #4  
Косых Артём ist offline
Косых Артём
Участник
Axapta Retail User
 
123 / 77 (3) ++++
Registriert seit: 03.09.2004
Ort: Москва
ой. не выспался туплю
Alt 28.09.2006, 09:44   #5  
Delfins ist offline
Delfins
Участник
 
320 / 39 (2) +++
Registriert seit: 20.09.2005
Ort: 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

Code:
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)

Geändert von Delfins (28.09.2006 um 09:46 Uhr)
Alt 28.09.2006, 09:48   #6  
PavelSR ist offline
PavelSR
Участник
 
98 / 10 (1) +
Registriert seit: 25.05.2006
Хорошо, допустим я предприму попытку проверить наличие следующей записи путем ее выбора, а как потом вернуть запрос в то состояние в котором он был до этого?
Alt 28.09.2006, 09:48   #7  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von mazzy Beitrag anzeigen
В java все переменные являются ссылками.
?
Alt 28.09.2006, 09:50   #8  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
PavelSR, а что за задачка, если не секрет? Какое-нибудь скользящее среднее вычисляете? Может быть стоит кардинально алгоритм перетряхнуть? Ну... сделайте там... два запроса, смещенных относительно друг друга на одну запись

_ 1
1 2
2 3
3 4
4 _
Alt 28.09.2006, 09:53   #9  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von PavelSR Beitrag anzeigen
Хорошо, допустим я предприму попытку проверить наличие следующей записи путем ее выбора, а как потом вернуть запрос в то состояние в котором он был до этого?
А зачем ее возвращать?
До того, как передвигать, скопируйте запись в другую переменную (например, при помощи Buf2Buf.

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

Сделайте поиск в коде переменной first или found.
Там есть примеры использования.
__________________
полезное на axForum, github, vk, coub.
Alt 28.09.2006, 09:55   #10  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von belugin Beitrag anzeigen
?
FAQ: http://forum.mazzy.ru/index.php?showtopic=310
__________________
полезное на axForum, github, vk, coub.
Alt 28.09.2006, 09:56   #11  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von Gustav Beitrag anzeigen
Может быть стоит кардинально алгоритм перетряхнуть?
Согласен.
__________________
полезное на axForum, github, vk, coub.
Alt 28.09.2006, 10:08   #12  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von mazzy Beitrag anzeigen
Вообще говоря, так вы передвинете курсор и в qr.
В java все переменные являются ссылками.
qr2 = qr не копирует сам курсор, копируется только ссылка на него.

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

По-моему нет способа узнать есть ли следующая запись, не сделав попытку ее получить.
Zitat:
Там написано что всё передается по значению Truth #1: Everything in Java is passed by value
Alt 28.09.2006, 10:12   #13  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
два запроса не обязательно. надо просто буферизовать нужное количество значений и вычислять только когда точно известно два последний значения
Alt 28.09.2006, 10:13   #14  
Косых Артём ist offline
Косых Артём
Участник
Axapta Retail User
 
123 / 77 (3) ++++
Registriert seit: 03.09.2004
Ort: Москва
Zitat:
Zitat von belugin Beitrag anzeigen
Там написано что всё передается по значению Truth #1: Everything in Java is passed by value
Значением переменной qr в моем примере является ссылка на объект QueryRun. Таким образом копируется значение переменной (которое есть ссылка на объект).
Alt 28.09.2006, 10:21   #15  
Delfins ist offline
Delfins
Участник
 
320 / 39 (2) +++
Registriert seit: 20.09.2005
Ort: 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.
Alt 28.09.2006, 10:27   #16  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von Delfins Beitrag anzeigen
ispolzuju MAP/Container
Тут надо помнить об одном - MAP|Container "живет" там, где его создали.
Поэтому создавать и обрабатывать такие контейнеры надо на AOS.
К сожалению, об этом часто забывают.

Работа с подобными структурами на клиенте резко уменьшает производительность и увеличивает трафик между AOS и клиентом.
__________________
полезное на axForum, github, vk, coub.
Alt 28.09.2006, 10:33   #17  
Recoilme ist offline
Recoilme
злыдень
Benutzerbild von Recoilme
Злыдни
 
895 / 192 (8) ++++++
Registriert seit: 18.06.2003
Zitat:
Zitat von mazzy Beitrag anzeigen
Тут надо помнить об одном - MAP|Container "живет" там, где его создали.
Поэтому создавать и обрабатывать такие контейнеры надо на AOS.
К сожалению, об этом часто забывают.

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

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

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

Geändert von Recoilme (28.09.2006 um 10:38 Uhr)
Alt 28.09.2006, 10:40   #18  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von Recoilme Beitrag anzeigen
Эээээ.... (c) Не верю.

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

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

Даю маячок: МАП надо не только создавать, но и заполнять чем-то.
__________________
полезное на axForum, github, vk, coub.
Alt 28.09.2006, 11:06   #19  
PavelSR ist offline
PavelSR
Участник
 
98 / 10 (1) +
Registriert seit: 25.05.2006
Zitat:
Zitat von mazzy Beitrag anzeigen
А зачем ее возвращать?
До того, как передвигать, скопируйте запись в другую переменную (например, при помощи 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);
можно ли вообще добиться того чего я хочу?

Geändert von PavelSR (28.09.2006 um 11:17 Uhr)
Alt 28.09.2006, 11:18   #20  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von PavelSR Beitrag anzeigen
если я сделаю выборку и не верну на место, то в отчете(используещий данный запрос) пропустится строчка...
В отчете используйте вторую переменную.
- Ну, а как ты спишь? Сидя, что ли? - спросила Черепаха.
- Нет, сплю я лёжа. Но когда я сплю, я же не пою!
- А ты представь себе, что ты спишь и поёшь!..
...
- И всё-таки это не по правде, - не открывая глаз, сказал Львёнок. - Ведь я сплю с закрытыми глазами и, значит, солнышко видеть не могу!
- А ты открой глаза, - сказала Черепаха. - И представь, как будто ты спишь с открытыми глазами и поёшь.
...
(С) Львенок и черепаха. http://www.skazka.com.ru/article/koz...002kozlov.html
__________________
полезное на axForum, github, vk, coub.
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Курсор перешел к следующей записи на клиенте, на сервере этого сделать уже нельзя 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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 13:26 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.