| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			У меня след. вопрос: я создаю запрос из кода, и в него добавляю два источника данных. Добавленные источники данных лежат на одном уровне, и связываются по полю MainId: 
		
		
		
		
		
		
		
	{ Query q = New Query(); q.addDatasource(tablenum(MainTable)); q.addDatasource(tablenum(LineTable)); q.dataSourceTable(LineTable).addRange(fieldnum(LineTable,MainId)).value("MainTable.MainId"); } Если данный запрос я присоединяю к источнику данных на форме, отображающей главную и подчиненную форму - то все работает прекрасно. Вопрос: Как я могу обратиться к записям таблиц(главной и подчиненной) через Query, QueryRun, в случае, если Query построен вышеописанным способом? Следующий метод возвращает пустую запись в LineTable: { QueryRun qr = New QueryRun(q); MainTable MainTable; LineTable LineTable; while (qr.next()) { MainTable = qr.get(MainTable); SalesTable = qr.get(LineTable); //пустая запись } } Также не помогло создавать для подчиненной таблицы свой QueryRun на основе Query с уже подставленным Range - возвращает произвольный набор строк из подчиненной таблицы  
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Юзовские 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Помести один datasource внутрь другого, например так: 
		
		
		
		
		
		
		
	PHP код: 
	
			
	PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Допустим у меня в MainTable и LineTable след. записи: 
		
		
		
		
		
		
		
	Заказ1 СтрокаLine1 СтрокаLine2 Заказ2 СтрокаLine3 Проблема в том, что если я так сделаю(свяжу источники данных, как главная и подчиненная, как addLink работает), то связь между таблицами MainTable и LineTable будет только InnerJoin (OuterJoin и т.д.) и после прикрепления этого запроса к источнику данных на форме данные будут отражаться след. образом: Заказ1 СтрокаLine1 СтрокаLine2 Заказ1 СтрокаLine1 СтрокаLine2 Заказ2 СтрокаLine3 А нужно, чтобы в query был независимый источник данных по MainTable(1-ый) и независимый источник данных по LineTable(2-ой), записи по которому отбираются по значению MainId в 1-м источнике данных. Непонятно, почему если я такой запрос присоединяю к источнику данных формы - все работает правильно, а когда делаю: MainTable MainTable; LineTable LineTable; QueryRun qr_main = New QueryRun(q);//q - исходный запрос QueryRun qr_desc; while (qr.next()) { MainTable = qr.get(tblenum(MainTable)); q.datasource(2).findrange(fieldnum(LineTable,MainId)).value(MainTable.MainId); qr_desc = New QueryRun(q); while (qr_desc.next())//СРАБОТАЕТ СТОЛЬКО РАЗ, СКОЛЬКО ЗАПИСЕЙ //В MAINTABLE + ОТОБРАННЫЕ ЗАПИСИ В LINETABLE????!!!!!! { .....отберет почему-то больше записей } }  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Юзовские 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если тебе все это надо для того чтобы сделать форму (похожую на заказы), то это можно сделать без программирования. На свойствах datasours'a формы есть свойства JoinSource и LinkType.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Черт побери  
		
		
		
		
		
		
		
	  Вообще-то, это логично, что queryrun выполняется по всем строкам всех входящих источников данных в Query!!!В таком случае, надо формировать два query - для главной и подчиненной таблицы. На формах, кстати, автоматически так и делается - переменные MainTable_Q и LineTable_Q.  | 
| 
	
 | 
| 
	
	 | 
	
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| Как подставить вычисляемое значение в Range у query | 16 | |||
| Установка условия ИЛИ (OR) в Query | 3 | |||
| Проблема с составлением Query | 10 | |||
| queryRun в рамках RunBaseBatch | 6 | |||
| Еще раз о Query | 7 | |||
		
  |