| 
			
			 | 
		#1 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Интересует такой вопрос . 
		
		
		
		
		
		
		
	Есть курсор после выполнения чего-нибудь (запроса, select'a и т.д.) Можно ли как-нибудь узнать текущую запись (номер) и кол-во записей в курсоре, не выполняя запрос еще раз.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Lean Six Sigma 
		
			
	 | 
	
	
	
		
		
		
		 
			
			нельзя.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			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)); }  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Lean Six Sigma 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Согласен. Так - можно. Нужно ли?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Иногда бывает нужно.  Удобно может быть, когда выбирается небольшое количество записей, а не вся InventTable, или еще лучше InventTrans  
		
		
		
		
		
		
		
	 ...
		 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Класс! То что надо. 
		
		
		
		
		
		
		
	Спасибо большое. А чтобы в обратном порядке бегать, есть какая-нибудь команда?  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не знаю такого  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано CDR  
А чтобы в обратном порядке бегать, есть какая-нибудь команда? SELECT REVERSE IT; хотя, полученный результат для меня был несколько неожиданным))  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В случае select reverse ... будет новый запрос на сервер. Записи отбираются в курсор в порядке, указанном в запросе, как бегать в обратном направлении по записям курсора не знаю... Может стоит поискать другое решени, зависит от конкретной задачи, БП  и его реализации.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Хотите сказать, что если будет такой код 
		
		
		
		
		
		
		
	PHP код: 
	
			
	А если использовать тот же код но с параметром Reverse в Select: PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Уж и не знаю, что ответить....  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			france ваше замечание оторвано от контекста темы, вопрос был в переборе записей, уже отобранных в курсор, а не в различных способах выборки записей из БД...  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			будем считать, что вне контекста и закроем вопрос.  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не выполняя никакого запроса еще раз не получится. 
		
		
		
		
		
		
		
	Если вы используете query, можно сильно сократить перебор в запросе за счет использования агреггирующих функций http://forum.mazzy.ru/index.php?showtopic=300 В select агрегирующие функции надо вписывать вручную.  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Согласен, Query и QueryRun гораздо удобнее, когда не все параметры известны до момента исполнения логики. При этом, запрос к БД будет формироваться при первом исполнении QueryRun.next() для построенного Query. После изменения Query для уже существующего QueryRun, при первом QueryRun.next() снова будет запрос к БД.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, однако класс QueryRun также имеет только метод .next(). 
		
		
		
		
		
		
		
	Получается, что если в курсоре необходимо обратиться к предыдущим записям, выполняй запрос заново?  
		 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если не ошибаюсь, то возможность перебирать выборку в одном направлении сделана из соображений производительности. 
		
		
		
		
		
		
		
	Так как в сиквеле есть несколько видов курсоров - один может перебирать запись и только в одном направлении, а другой в обоих. Но последний работает значительно медленнее. В принципе если запись уже выбрана один раз, то для того чтобы к ней вернуться, стоит организовать некое подобие массива ? Получится быстрее.  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сомневаюсь.. Или Вы в памяти будете весь массив держать? Приемлемый вариант - временная таблица. А если на диске, то снова запросы...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано George Nordic  
Приемлемый вариант - временная таблица.   Надеюсь это шутка?  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Временная таблица заполняется оттуда, где будет вставлена 1 запись. Причем не факт, что она будет создана на диске - скорее всего в памяти. 
		
		
		
		
		
		
		
	А Вы предлагаете массив?  
		 | 
| 
	
 |