![]() |
#1 |
Участник
|
Существование следующей записи в запросе
Добрый день! Подскажите как можно узнать о наличии или отсутствии следующей записи в запросе? При этом ее(слудующую запись) выбирать не нужно.
|
|
![]() |
#2 |
Участник
|
насколько я могу догадываться, необходимо произвести какие-то действия с текущей записью запроса в зависимости от того существует ли следующая запись.
я бы использовал для этих целей какую-то временную запись и все таки выбирал следующую запись. можно еще так сделать: Код: QueryRun qr, qr2; ; ... while(qr.next()) { qr2 = qr; if(qr2.next()) { ... } } |
|
![]() |
#3 |
Участник
|
Цитата:
В java все переменные являются ссылками. qr2 = qr не копирует сам курсор, копируется только ссылка на него. Кроме того, запрос все равно остается. По-моему нет способа узнать есть ли следующая запись, не сделав попытку ее получить. |
|
![]() |
#4 |
Участник
|
ой. не выспался
![]() |
|
![]() |
#5 |
Участник
|
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++; } 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. |
|
![]() |
#6 |
Участник
|
Хорошо, допустим я предприму попытку проверить наличие следующей записи путем ее выбора, а как потом вернуть запрос в то состояние в котором он был до этого?
|
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Moderator
|
PavelSR, а что за задачка, если не секрет? Какое-нибудь скользящее среднее вычисляете? Может быть стоит кардинально алгоритм перетряхнуть? Ну... сделайте там... два запроса, смещенных относительно друг друга на одну запись
![]() _ 1 1 2 2 3 3 4 4 _ |
|
![]() |
#9 |
Участник
|
Цитата:
До того, как передвигать, скопируйте запись в другую переменную (например, при помощи Buf2Buf. Кроме того, почитайте книжку Еременко и/или BestPractice. Там советуют выборку делать без модификатора forupdate, а для изменения найти запись еще раз но уже с модификатором forupdate. В общем случае так уменьшается вероятность блокировки. Сделайте поиск в коде переменной first или found. Там есть примеры использования. |
|
![]() |
#10 |
Участник
|
|
|
![]() |
#11 |
Участник
|
|
|
![]() |
#12 |
Участник
|
|
|
![]() |
#13 |
Участник
|
два запроса не обязательно. надо просто буферизовать нужное количество значений и вычислять только когда точно известно два последний значения
|
|
![]() |
#14 |
Участник
|
|
|
![]() |
#15 |
Участник
|
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. |
|
![]() |
#16 |
Участник
|
Тут надо помнить об одном - MAP|Container "живет" там, где его создали.
Поэтому создавать и обрабатывать такие контейнеры надо на AOS. К сожалению, об этом часто забывают. Работа с подобными структурами на клиенте резко уменьшает производительность и увеличивает трафик между AOS и клиентом. |
|
![]() |
#17 |
злыдень
|
Цитата:
Сообщение от mazzy
![]() Тут надо помнить об одном - MAP|Container "живет" там, где его создали.
Поэтому создавать и обрабатывать такие контейнеры надо на AOS. К сожалению, об этом часто забывают. Работа с подобными структурами на клиенте резко уменьшает производительность и увеличивает трафик между AOS и клиентом. Забавно это слышать от представителя компании специализирущейся одно время на оптимизации производительности )) Попробуйте на досуге измерить насколько "резко снизится производительность" от создания мапа на клиенте. В абсолютных и относительных величинах.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ Последний раз редактировалось Recoilme; 28.09.2006 в 10:38. |
|
![]() |
#18 |
Участник
|
Цитата:
Сообщение от Recoilme
![]() Эээээ.... (c) Не верю.
Забавно это слышать от представителя компании специализирущейся одно время на оптимизации производительности )) Попробуйте на досуге измерить насколько "резко снизится производительность" от создания мапа на клиенте. В абсолютных и относительных величинах. Всегда думайте самостоятельно. Даю маячок: МАП надо не только создавать, но и заполнять чем-то. ![]() |
|
![]() |
#19 |
Участник
|
Цитата:
Сообщение от 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. |
|
![]() |
#20 |
Участник
|
Цитата:
- Ну, а как ты спишь? Сидя, что ли? - спросила Черепаха. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|