![]() |
#1 |
Участник
|
update_recordset и конкатенация строк
Всем привет!
Столкнулся с такой проблемой: X++: //Работает update_recordset myTable_1 setting ErrorTxt = "AAAAA " + myTable_1.Field_str /*+ " BBB "*/; //НЕ Работает update_recordset myTable_1 setting ErrorTxt = "AAAAA " + myTable_1.Field_str + " BBB "; Ax2009 kernel 5.0.1500.2116 клиент тот же. БД SQL 2008 Текст который указывается после поля таблицы, в SQL Profiler воспринимается как bigint. Кто нибудь сталкивался с подобной проблемой? |
|
|
За это сообщение автора поблагодарили: lev (5), S.Kuskov (5). |
![]() |
#2 |
Ищущий знания...
|
с такой проблемой не сталкивался... но мне кажется в таком виде делать присвоение, как то не красиво что ль... лучше заполнить переменную нужным значением заранее, и потом её присвоить.
Что то, типа: X++: ErrorTxt errorTxt; ; errorTxt = "AAAAA " + myTable_1.Field_str + " BBB "; update_recordset myTable_1 setting ErrorTxt = errorTxt;
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#3 |
Участник
|
2 lev: тк update_recordset массово обновляет строки, а топикстартеру надо обновить значение одного поля на основании другого, то предложенный вами способ не пойдет
|
|
![]() |
#4 |
Участник
|
А если вам надо обновить пол миллиарда строк в таблице?
И переменная эта для каждой строки своя! |
|
![]() |
#5 |
Ищущий знания...
|
Цитата:
![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#6 |
Участник
|
А если всё выражение или его часть взять в скобки?
|
|
![]() |
#7 |
Участник
|
Да все так же.
P.S. Так не хочется делать циклы. |
|
![]() |
#8 |
северный Будда
|
Попробуйте использовать strfmt("AAAAA %1 BBB ", myTable_1.Field_str), возможно поможет
__________________
С уважением, Вячеслав |
|
![]() |
#9 |
Участник
|
|
|
![]() |
#10 |
Участник
|
Пробовал, компилятор ругается.
|
|
![]() |
#11 |
Ищущий знания...
|
а если выполнить этот апдейт в самом SQL в таком виде, тоже обругается?
Я клоню к тому, что может сформировать текст запроса в аксапте и отправить его на исполнение через Statement.executeUpdate(sqlTxt)?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#12 |
Участник
|
|
|
![]() |
#13 |
Участник
|
Цитата:
Если условия позволяют, то обновляйте в два этапа сначала X++: update_recordset myTable_1 setting ErrorTxt = "AAAAA " + myTable_1.Field_str; X++: update_recordset myTable_1 setting ErrorTxt = myTable_1.Field_str + " BBB "; ![]() |
|
![]() |
#14 |
Ищущий знания...
|
Не очень понял про сложности...
Человеку нужно из аксапты обновить много записей в таблице. использовать существующий синтаксис аксапты не получается из-за бага, поэтому я предлагаю обойти существующий синтаксис и отправить выполнение запроса на SQL. Причем тут менеджмент студио? Не будет же человек каждый раз в ручную запускать этот запрос из менеджмент студио? Для проверки конечно же надо использовать её ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#15 |
северный Будда
|
Цитата:
только на втором этапе надо будет прибавлять к ErrorTxt, а не к Field_str
__________________
С уважением, Вячеслав |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
![]() |
#16 |
Участник
|
Цитата:
Сообщение от lev
![]() Не очень понял про сложности...
Человеку нужно из аксапты обновить много записей в таблице. использовать существующий синтаксис аксапты не получается из-за бага, поэтому я предлагаю обойти существующий синтаксис и отправить выполнение запроса на SQL. Причем тут менеджмент студио? Не будет же человек каждый раз в ручную запускать этот запрос из менеджмент студио? Для проверки конечно же надо использовать её ![]() ![]() ![]() Последний раз редактировалось ice; 18.10.2011 в 15:25. |
|
![]() |
#17 |
Ищущий знания...
|
В общем я бы пошел по следующему пути (если бизнес логика из метода update() таблицы не нужна) :
1. Если нужно разово выполнить обновление какого то поля, во всей таблице, то выполнил был это обновление напрямую в SQL. 2. Если это какая то периодическая операция, которая раз в месяц (неделю, квартал, год) должна выполняться кем то из аксапты, то сформировал бы SQL запрос и выполнил его напрямую в SQL из аксапты (как это сделать я писал в предыдущих сообщениях). P.S. если конечно сам SQL нормально переваривает такого вида запрос ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 18.10.2011 в 15:49. Причина: добавил P.S. |
|
![]() |
#18 |
Участник
|
Цитата:
X++: update_recordset myTable_1 setting ErrorTxt = myTable_1.ErrorTxt + "CCC" + myTable_1.Field10_str + " DDD "; Цитата:
зачем такие сложности, можно в менеджментстудио
Хотелось бы избежать SQLStatement'ов и с Аксаптовой таблицей работать приятнее и проще. З.Ы. Пол миллиарда как пример привел. |
|
![]() |
#19 |
Участник
|
Цитата:
Сообщение от lev
![]() В общем я бы пошел по следующему пути:
2. Если это какая то периодическая операция, которая раз в месяц (неделю, квартал, год) должна выполняться кем то из аксапты, то сформировал бы SQL запрос и выполнил его напрямую в SQL из аксапты (как это сделать я писал в предыдущих сообщениях). P.S. если конечно сам SQL нормально переваривает такого вида запрос ![]() |
|
![]() |
#20 |
Ищущий знания...
|
По хорошему сообщить бы в Майкрософт об этом баге...
Может они его исправят или хотя бы как то прокомментируют...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|