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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.05.2006, 13:44   #1  
Artem Mikhailov is offline
Artem Mikhailov
Участник
 
19 / 11 (1) +
Регистрация: 22.10.2005
переполнение в qbds.addRange(_fieldId).value(_str) на OR
Добрый день,

Столкнулся с такой проблемой - при формировании запроса qbds.addRange(_fieldId).value(_str), если передать в _str значение "par1,par2...,parN", система при количестве свыше нескольких сотен параметров парсит запрос некорректно:

Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near '('.
Оператор SQL: SELECT SUM(A.QTY),COUNT(A.JOURNALID),A.ITEMID,A.BOMID,A.UNITID FROM SOMEJOURNAL A WHERE ((A.DATAAREAID=?) AND (((A.BOMID=?) AND ((((((...[очень много скобок]...(((((((((A.JOURNALID=?) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR (A.JOURNALID=?)) OR...

[много-много OR (A.JOURNALID=?))]

... (A.JOURNALID=?))) GROUP BY A.ITEMID,A.BOMID,A.UNITID ORDER BY A.ITEMID DESC,A.BOMID,A.UNITID

Скажите, можно ли победить эту проблему, или ошибка является системной?

Вызов подобного запроса идет из формы по произвольно выбранным пользователем строкам для отображения общей суммы выделенных записей SOMEJOURNAL.

Артем

Последний раз редактировалось Artem Mikhailov; 25.05.2006 в 13:48.
Старый 25.05.2006, 14:03   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Варианты решения :
1. Использовать перебор выбранных записей на форме. см. например метод getFormRecord() класса FormLetter

2. Включить для запроса использование литералов (т.е. запрос будет уходить на сервак не в виде запроса с параметрами а ввиде строчки с константами)
т.е. написать
имятаблицы_DS.query().literals(2);
или
имятаблицы_DS.query().literals(1);
значение параметра не помню.
Но по любому 0, 1 или 2

В мониторинге запросов увидите когда пойдут константы в теле запроса, а не параметры.

3. Создать табличку в аксапте
столбец 1 : значения по которым надо фильтровать
столбец 2 : номер сесии под которой юзер законнектился (или например гуид WinApi::greateGuid() )
заполняем табличку, джоиним форму с этой табличкой. На форуме подобное уже описывали - работает.
Не забыть потом очистить табличку.
Старый 25.05.2006, 14:06   #3  
Pasha_x is offline
Pasha_x
Участник
 
6 / 10 (1) +
Регистрация: 12.08.2004
Адрес: Москва
Столкнулся с подобной проблемой. Решилась ситуциия сл. образом
имятаблицы_DS.query().literals(1);
Старый 25.05.2006, 14:11   #4  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Делайте AddRange для каждого номера журнала.
Старый 25.05.2006, 16:05   #5  
Artem Mikhailov is offline
Artem Mikhailov
Участник
 
19 / 11 (1) +
Регистрация: 22.10.2005
Спасибо, вот это подошло:

Цитата:
Сообщение от Logger
Варианты решения :

3. Создать табличку в аксапте
столбец 1 : значения по которым надо фильтровать
столбец 2 : номер сесии под которой юзер законнектился (или например гуид WinApi::greateGuid() )
заполняем табличку, джоиним форму с этой табличкой. На форуме подобное уже описывали - работает.
Не забыть потом очистить табличку.
Остальное, к сожалению, не дало эффекта для запроса более чем с 2000 параметрами на OR

Артем
Старый 25.05.2006, 17:32   #6  
zipo is offline
zipo
Участник
 
32 / 23 (1) +++
Регистрация: 16.05.2006
Цитата:
3. Создать табличку в аксапте
столбец 1 : значения по которым надо фильтровать
столбец 2 : номер сесии под которой юзер законнектился (или например гуид WinApi::greateGuid() )
заполняем табличку, джоиним форму с этой табличкой. На форуме подобное уже описывали - работает.
Не забыть потом очистить табличку.
А сделать ее просто темповой ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Оптимизация запроса - ranges kashperuk DAX: Программирование 13 31.01.2011 20:19
Установка условия ИЛИ (OR) в Query Zeratul DAX: Программирование 3 22.06.2006 14:28
Временная таблица + RLS leshy DAX: Программирование 6 27.04.2006 12:39
addRange; AND vs OR diviza DAX: Программирование 13 26.05.2004 13:03
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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