| 
			
			 | 
		#1 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
			
			
			Запрос
			 
			
			Абстрактный вопрос с которым я столкнулся и который неожиданной вызвал у меня затруденение. 
		
		
		
		
		
		
		
	При удалении одной из строк заказа считать сумму оставшихся строк этого заказа. Я реализовал это так: Дописал delete у SalesLine_ds (то есть того, который содержится в форме следующими строками): st = SalesLine.SalesId; print st; t = (select * from SalesTable where SalesTable.SalesId == SalesLine.SalesId).RecId; print t; n = (select sum(LineAmount) from SalesLine where SalesLine.SalesID== (select * from SalesTable where SalesTable.RecId==t).SalesId).LineAmount; print n; Это работает. Но зачем такая сложность. Неужели нельзя проще ????? Очень хотелось сделать так: n = (select sum(LineAmount) from SalesLine where SalesLine.SalesId==st).LineAmount; Но Аксапта ругается, что в SQL выражениях нельзя осуществлять сравнение со строками. Что это за фигня ? Как нельзя ? И это при том, что почте все ключевые поля наследованы от строк !!!!!!! Может быть кто-нибудь сможет мне объяснить - в чем здесь смысл ???? А выражение n = (select sum(LineAmount) from SalesLine where SalesLine.SalesId==SalesLine.SalesId).LineAmount; естественно считает сумму по всем строкам всех заказов.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Смотрящий поверх деревьев (Варварский отморозок) 
		
			
	 | 
	
	
	
		
		
		
		 
			
			<Зохавано мудератором> 
		
		
		
		
		
		
			за неуплату 
				__________________ 
		
		
		
		
	It's a dirty job, but someone's got to do it. So?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Всем привет! 
		
		
		
		
		
		
		
	В дополнение к словам PlasticinE: можно также сравнивать со строковой константой (в данном случае не подходит   ) и со строковой переменной с заданным при ее объявлении размером, например:     str 100 st;Цитата: 
	
		
			А выражение  
n = (select sum(LineAmount) from SalesLine where SalesLine.SalesId==SalesLine.SalesId).LineAmount; естественно считает сумму по всем строкам всех заказов. SalesLine sl; ; select sum(LineAmount) from sl where sl .SalesId==SalesLine.SalesId; print sl.LineAmount;  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			PlasticinE  
Попробуй сказать ему : SalesId st; Цитата: 
	
		
			Dron AKA andy  
А здесь можно использовать переменную типа SalesLine: SalesLine sl; ; select sum(LineAmount) from sl where sl .SalesId==SalesLine.SalesId; print sl.LineAmount; print (select sum(LineAmount) from sl where sl .SalesId==SalesLine.SalesId).LineAmount; А вот это уже не работает !!!!! Курсор становится на sl и говорит, что таблица не существует. Почему ????  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я так понял (из опыта), что конструкция вида 
		
		
		
		
		
		
		
	variable = (select Table_name).Field_name; т.е. когда сразу пытаешься получить значение поля из select`а, работает только для реальных названий таблиц из репозитария, а для переменных не работает. Соответственно, для переменных пригодна конструкция Table_name t; ; select t; variable = t.Field_name;  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Андре  
...сравнивать со строками нельзя, а с типами унаследованными от строки можно. Странно, но ладно... строка типа str - это строка неопределенной длины. В базе данных этому типу соответствует тип memo, а не str[xx]  | 
| 
	
 |