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 |
Участник
|
Цитата:
Цитата:
|
|