AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.08.2009, 09:57   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
update_recordset и мемо-поля
Есть код:

X++:
str d;
;
update_recordset table
setting data = d
where ...
где data - мемо-поле.

Данный код не работает, так как выдается ошибка:
Цитата:
Контейнерные и текстовые поля не могут быть использованы в выражении WHERE
Кстати, причем здесь WHERE

Если объявить d как
X++:
str 10000 d;
то независимо от указанного размера поле строка урежется до 1000 символов.

Получается, что update_recordset не умеет обновлять мемо-поля?

Ax 3.0 SP3 MSSQL 2005
Старый 27.08.2009, 11:41   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Не умеет.
Не уверен, что это баг. Да и как часто кому-то понадобиться установить значение сразу нескольких мемо-полей?
Старый 27.08.2009, 11:52   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Не умеет.
Не уверен, что это баг. Да и как часто кому-то понадобиться установить значение сразу нескольких мемо-полей?
Согласен, но вот один раз понадобилось. Может это и не баг, но уж больно ошибка странная. Ругается, что нельзя использовать контейнерые поля в выражении WHERE, даже если WHERE убрать совсем.

И еще не очень понятны причины такоего поведения. То что в WHERE нельзя использовать контейнерные поля - это логично: в контейнере может быть все что угодно и неизвестно как это все сравнивать между собой. А вот в чем проблема в присваивании не понятно. Тем более обычный update так делать умеет.
Старый 28.08.2009, 12:13   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вроде бы не только update_recordset в Аксапте, но и СУБД не умеет "пачками" обновлять контейнерные поля. Во всяком случае, на Oracle вроде записи с BLOB/CLOB обрабатываются по одной за раз. Так что использование update_recordset вместо цикла while select forupdate теряет смысл.
Старый 28.08.2009, 13:50   #5  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вроде бы не только update_recordset в Аксапте, но и СУБД не умеет "пачками" обновлять контейнерные поля. Во всяком случае, на Oracle вроде записи с BLOB/CLOB обрабатываются по одной за раз. Так что использование update_recordset вместо цикла while select forupdate теряет смысл.
Не знаю как на счет BLOB, но мемо-поля (в MSSQL тип text) нормально обновляются.
То есть пишешь запрос
X++:
UPDATE table
SET data = value
и нормально обновляет больше одной записи.

Возможно конечно, что так сделано для совместимости с различными СУБД
Старый 28.08.2009, 14:10   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,319 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Возможно конечно, что так сделано для совместимости с различными СУБД
Если вспомнить немного истории, то вспомнится - что Аксапта сначала затачивалась под оракл (до покупки ее МСом) и команд update_recordset, delete_from не было в принципе в Х++ (до 3.0).
После покупки МСом - Аксапта стала затачиваться на SQL Server, но официально от оракла как я понимаю не отказались и Х++ в Transact SQL превращаться не собирается
__________________
Возможно сделать все. Вопрос времени
Теги
ax3.0, memo, sql 2005, update_recordset

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Лукап, содержащий поля нескольких таблиц matew DAX: Программирование 4 30.11.2006 16:02
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Недопустимая комбинация поля/поля ссылки Berty Wooster DAX: Программирование 2 29.05.2003 16:31

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:35.