25.05.2006, 13:44 | #1 |
Участник
|
переполнение в 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 |
Участник
|
Варианты решения :
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 |
Участник
|
Столкнулся с подобной проблемой. Решилась ситуциия сл. образом
имятаблицы_DS.query().literals(1); |
|
25.05.2006, 14:11 | #4 |
Участник
|
Делайте AddRange для каждого номера журнала.
|
|
25.05.2006, 16:05 | #5 |
Участник
|
Спасибо, вот это подошло:
Цитата:
Сообщение от Logger
Варианты решения :
3. Создать табличку в аксапте столбец 1 : значения по которым надо фильтровать столбец 2 : номер сесии под которой юзер законнектился (или например гуид WinApi::greateGuid() ) заполняем табличку, джоиним форму с этой табличкой. На форуме подобное уже описывали - работает. Не забыть потом очистить табличку. Артем |
|
25.05.2006, 17:32 | #6 |
Участник
|
Цитата:
3. Создать табличку в аксапте
столбец 1 : значения по которым надо фильтровать столбец 2 : номер сесии под которой юзер законнектился (или например гуид WinApi::greateGuid() ) заполняем табличку, джоиним форму с этой табличкой. На форуме подобное уже описывали - работает. Не забыть потом очистить табличку. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Оптимизация запроса - ranges | 13 | |||
Установка условия ИЛИ (OR) в Query | 3 | |||
Временная таблица + RLS | 6 | |||
addRange; AND vs OR | 13 | |||
"LIKE" и "OR" в "qbds" | 14 |
|