| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Почему не отрабатывает update_recordset?
			 
			
			Добрый день!  
		
		
		
		
		
		
		
	Хотелось бы понять почему не отрабатывает 2й вар-т, причем 1й работает... Типы совпадают. X++: while select forupdate inventJournalTrans where inventJournalTrans.JournalId == this.JournalId { inventJournalTrans.Dimension = dimension; inventJournalTrans.update(); } update_recordset inventJournalTrans setting Dimension = dimension where inventJournalTrans.JournalId == this.JournalId;  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Потому что это известный баг. 
		
		
		
		
		
		
			Надо в промежутке перед update_recordset написать X++: inventJournalTrans = null;![]() Вообще, это даже, кажется, в "Полезных материалах" было... 
				__________________ 
		
		
		
		
		
			Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...  
			Последний раз редактировалось Maximin; 05.06.2008 в 11:47.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: breakpoint (1). | |
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: update_recordset inventJournalTrans setting Dimension = dimension where inventJournalTrans.JournalId == this.JournalId; Попробуйте так: X++: update_recordset inventJournalTrans setting Dimension[1] = dimension[1], Dimension[2] = dimension[2], Dimension[3] = dimension[3] where inventJournalTrans.JournalId == this.JournalId;  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2Maximin 
		
		
		
		
		
		
		
	переменная итак null...  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от _scorp_
			 
 
			X++: update_recordset inventJournalTrans setting Dimension = dimension where inventJournalTrans.JournalId == this.JournalId; Попробуйте так: X++: update_recordset inventJournalTrans setting Dimension[1] = dimension[1], Dimension[2] = dimension[2], Dimension[3] = dimension[3] where inventJournalTrans.JournalId == this.JournalId;  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			скорей всего не дружит update_recordset с dimension
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			все верно, ругается на совместимость типов 
		
		
		
		
		
		
		
	надеюсь в следующих версиях будет исправлено это недоразумение  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А какой код должен быстрее работать? 
		
		
		
		
		
		
		
	X++: while select forupdate inventJournalTrans where inventJournalTrans.JournalId == this.JournalId { inventJournalTrans.Dimension = dimension; inventJournalTrans.doUpdate(); } X++: update_recordset inventJournalTrans setting Dimension[1] = dimension[1], Dimension[2] = dimension[2], Dimension[3] = dimension[3], Dimension[4] = dimension[4] where inventJournalTrans.JournalId == this.JournalId;  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			А какой код должен быстрее работать?
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я недавно профайлером подобный пример с dimensions тестировал, результат был неоднозначный, потому и спросил. 
		
		
		
		
		
		
		
	Возможно на малом количестве записей это не играет большой роли.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Кроме того если в процессе разработки добавится новый dimension, подобные варианты с update_recordset придется отыскивать и модифицировать.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 MCITP 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
см. пример 
				__________________ 
		
		
		
		
	Zhirenkov Vitaly  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Кстати да, поскольку update_recordset в любом случае вызывает метод update(), который может быть сколь угодно тяжеловесным, то while select вкупе с doUpdate() во многих случаях будет отрабатывать быстрее.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Предупреждение: Но при этом во многих случаях может нарушить целостность базы. 
		
		
		
		
		
		
			
		
		
		
		
	Советчики... Блин...  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сравнение некорректное. 
		
		
		
		
		
		
			
		
		
		
		
	Если делаете doUpdate в первом случае, то и во втором случае тоже надо пропускать update() на таблице. Делается это вызовом метода skipDataMethods() на курсоре inventJournalTrans, в данном случае. update_recordset всегда будет работать быстрее, если правильно сравнивать.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Hyper (1). | |
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Спасибо, взял на заметку. Последний раз редактировалось Hyper; 25.06.2008 в 16:28.  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Цитата: 
	
![]()  
		 | 
| 
	
 |