27.08.2009, 09:57 | #1 |
Участник
|
update_recordset и мемо-поля
Есть код:
X++: str d; ; update_recordset table setting data = d where ... Данный код не работает, так как выдается ошибка: Цитата:
Контейнерные и текстовые поля не могут быть использованы в выражении WHERE
Если объявить d как X++: str 10000 d; Получается, что update_recordset не умеет обновлять мемо-поля? Ax 3.0 SP3 MSSQL 2005 |
|
27.08.2009, 11:41 | #2 |
Участник
|
Не умеет.
Не уверен, что это баг. Да и как часто кому-то понадобиться установить значение сразу нескольких мемо-полей? |
|
27.08.2009, 11:52 | #3 |
Участник
|
Цитата:
И еще не очень понятны причины такоего поведения. То что в WHERE нельзя использовать контейнерные поля - это логично: в контейнере может быть все что угодно и неизвестно как это все сравнивать между собой. А вот в чем проблема в присваивании не понятно. Тем более обычный update так делать умеет. |
|
28.08.2009, 12:13 | #4 |
Участник
|
Вроде бы не только update_recordset в Аксапте, но и СУБД не умеет "пачками" обновлять контейнерные поля. Во всяком случае, на Oracle вроде записи с BLOB/CLOB обрабатываются по одной за раз. Так что использование update_recordset вместо цикла while select forupdate теряет смысл.
|
|
28.08.2009, 13:50 | #5 |
Участник
|
Цитата:
То есть пишешь запрос X++: UPDATE table SET data = value Возможно конечно, что так сделано для совместимости с различными СУБД |
|
28.08.2009, 14:10 | #6 |
Administrator
|
Если вспомнить немного истории, то вспомнится - что Аксапта сначала затачивалась под оракл (до покупки ее МСом) и команд update_recordset, delete_from не было в принципе в Х++ (до 3.0).
После покупки МСом - Аксапта стала затачиваться на SQL Server, но официально от оракла как я понимаю не отказались и Х++ в Transact SQL превращаться не собирается
__________________
Возможно сделать все. Вопрос времени |
|
Теги |
ax3.0, memo, sql 2005, update_recordset |
|
|