|  05.06.2008, 11:31 | #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; | 
|  | 
|  05.06.2008, 11:44 | #2 | 
| NavAx | 
			
			Потому что это известный баг. Надо в промежутке перед update_recordset написать X++: inventJournalTrans = null; Вообще, это даже, кажется, в "Полезных материалах" было... 
				__________________ Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...   Последний раз редактировалось Maximin; 05.06.2008 в 11:47. | 
|  | |
| За это сообщение автора поблагодарили: breakpoint (1). | |
|  05.06.2008, 11:51 | #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; | 
|  | 
|  05.06.2008, 12:05 | #4 | 
| Участник | 
			
			2Maximin переменная итак null... | 
|  | 
|  05.06.2008, 12:05 | #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; | 
|  | 
|  05.06.2008, 12:06 | #6 | 
| Участник | 
			
			скорей всего не дружит update_recordset с dimension
		 | 
|  | 
|  05.06.2008, 12:07 | #7 | 
| Участник | |
|  | 
|  05.06.2008, 13:30 | #8 | 
| Участник | 
			
			все верно, ругается на совместимость типов надеюсь в следующих версиях будет исправлено это недоразумение | 
|  | 
|  05.06.2008, 15:56 | #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; | 
|  | 
|  05.06.2008, 16:20 | #10 | 
| Участник | Цитата: 
		
			А какой код должен быстрее работать?
		
	 | 
|  | 
|  05.06.2008, 16:47 | #11 | 
| Участник | 
			
			Я недавно профайлером подобный пример с dimensions тестировал, результат был неоднозначный, потому и спросил. Возможно на малом количестве записей это не играет большой роли. | 
|  | 
|  05.06.2008, 17:29 | #12 | 
| Участник | 
			
			Кроме того если в процессе разработки добавится новый dimension, подобные варианты с update_recordset придется отыскивать и модифицировать.
		 | 
|  | 
|  05.06.2008, 18:36 | #13 | 
| MCITP |   Цитата: см. пример 
				__________________ Zhirenkov Vitaly | 
|  | 
|  25.06.2008, 15:04 | #14 | 
| Участник | 
			
			Кстати да, поскольку update_recordset в любом случае вызывает метод update(), который может быть сколь угодно тяжеловесным, то while select вкупе с doUpdate() во многих случаях будет отрабатывать быстрее.
		 | 
|  | 
|  25.06.2008, 15:10 | #15 | 
| Участник | 
			
			Предупреждение: Но при этом во многих случаях может нарушить целостность базы. Советчики... Блин... | 
|  | 
|  25.06.2008, 15:31 | #16 | 
| Участник | 
			
			Сравнение некорректное. Если делаете doUpdate в первом случае, то и во втором случае тоже надо пропускать update() на таблице. Делается это вызовом метода skipDataMethods() на курсоре inventJournalTrans, в данном случае. update_recordset всегда будет работать быстрее, если правильно сравнивать. | 
|  | |
| За это сообщение автора поблагодарили: Hyper (1). | |
|  25.06.2008, 16:26 | #17 | 
| Участник | Цитата: Спасибо, взял на заметку. Последний раз редактировалось Hyper; 25.06.2008 в 16:28. | 
|  | 
|  25.06.2008, 18:27 | #18 | 
| Участник | Цитата: Цитата:    | 
|  |