21.12.2007, 15:35 | #1 |
Участник
|
Error executing code: Binding operation failed to allocate buffer space
Что это за ошибка?
В классе создается запрос, в который передаются в Range значения типа " *124*,*E128*,*131*,*154*,*155*". Происходит при первом вызове queryRun.next(). Возникает как только длина передаваемой в Range строки начинает превышать 40 символов. Возвращаемое количество строк на предельной длине -9, то есть это не должно зависеть от кол-ва возвращаемых строк, а как-то связано с длиной передаваемой в range строки. Кто-нить сталкивался? Последний раз редактировалось kitty; 21.12.2007 в 15:42. |
|
21.12.2007, 16:01 | #2 |
Member
|
А текст сформированного SQL-запроса смотреть пробовали? Там все ОК?
А то на простеньком примере в 4.0, вроде, работает.
__________________
С уважением, glibs® |
|
21.12.2007, 16:21 | #3 |
Moderator
|
В общем то, шансы получить ответ могуть повыситься, если Вы укажите:
1) Тип СУБД (от этого может, кстати зависеть набор следующих вопросов) и его версию 2) Версию Аксапты со всеми установленными дополнениями, типа KR 3) Версию MDAC 4) Минимальный пример для воспроизведения ошибки |
|
21.12.2007, 17:21 | #4 |
Участник
|
Ax4: kernel: 4.0.2163.0
application: 4.0.2163.0 sql 2005 Пример привести не могу, тк попытки произвести это же на ,допустим SalesTable, к ошибке не приводят (((((((((. |
|
21.12.2007, 17:23 | #5 |
Участник
|
|
|
21.12.2007, 17:25 | #6 |
Участник
|
именно так пробую разбить , но не помогает
то есть AddRange('длина<40'); AddRange('длина<40') ... та же ошибка возвращается |
|
21.12.2007, 17:27 | #7 |
Участник
|
а один AddRange точно работает?
|
|
21.12.2007, 17:28 | #8 |
Member
|
Это ошибка MS SQL?
__________________
С уважением, glibs® |
|
21.12.2007, 17:29 | #9 |
Участник
|
вернее они оба по отдельности
|
|
21.12.2007, 17:35 | #10 |
Участник
|
|
|
21.12.2007, 17:40 | #11 |
Участник
|
Вы с обоими ренджами по отдельности пробовали (т.е. пытаемся исключить то, что ошибка в данных)
|
|
21.12.2007, 18:05 | #12 |
Участник
|
от данных не зависит, тк я вообще сейчас вместо оригинальных данных забила строки "от балды":
так работает: qb.addRange(FieldNum(table,value)).value('Ett, *rrr*'); qb.addRange(FieldNum(table,value)).value('u, *rnn*, *www*, *ppp*, *xxx*'); в так - не работает, хотя количество символов то же, но "параметров" разное(см вторую строку): qb.addRange(FieldNum(table,value)).value('Ett, *rrr*'); qb.addRange(FieldNum(table,value)).value('u, r, *n*, *www*, *ppp*, *xxx*'); |
|
21.12.2007, 18:08 | #13 |
Участник
|
попробуйте сделать query.literals(1)
|
|
|
За это сообщение автора поблагодарили: kashperuk (5), kitty (1), plumbum (1). |
21.12.2007, 18:16 | #14 |
Участник
|
ГЕНИАЛЬНО!!!!!!! ЗАРАБОТАЛО!
Можно я вам что-нить подарю? |
|
21.12.2007, 18:41 | #15 |
Участник
|
А как вы думаете, в чем была проблема. что вываливалась ошибка?
что делают literals -placeholders я понимаю, но что переклинивало ax- не понимаю. Дело в том, что я тут недавно боролась с производительностью и не хочется ее снижать, поэтому думаю поставить условие, при котором ставить litrerals(1). по-видимому ошибка зависела от количества параметров , а не длины строки, но тк я не понимаю почему вываливалась ошибка. не могу гарантировать, что в следующий раз она не появится уже при другом количстве параметров(если условие на literals не сработает). Что посоветуете? Еще раз огромное спасибо! |
|
23.12.2007, 20:27 | #16 |
Участник
|
по-видимому в запросе была куча плейсхолдеров
то есть вопмировался запрос вида table.feld like ? or table.feld like ? or table.feld like ? or table.feld like ? и его перекосячило из за количества вопросиков. Может где-то есть настройка про размер этого буфера (попробуйте в натройках сервера на закладке database tuning выставить буфер побольше) не вполне понятно, почему на других таблицах не работает. Интересно было бы воспроизвести на стандарте. |
|
28.09.2010, 16:50 | #17 |
Участник
|
|
|
29.09.2010, 16:33 | #18 |
Участник
|
Данная ошибка возникает когда переполняется буфер обмена между АОСом и сиквелом. Сформированый в квери запрос превышает размер буфера. Значение по умолчанию - 24кБ(значение в настройках сервера указывается в килобайтах). Увеличение размера буфера в параметрах поможет вылечить проблему с превышением размера буфера, но при этом снизит перформанс системы в целом. Такой подход применим как кратковременное решение, чтобы выиграть время и переписать проблемный запрос.
|
|
29.09.2010, 19:10 | #19 |
Участник
|
Цитата:
Сообщение от Mykola Galak
Данная ошибка возникает когда переполняется буфер обмена между АОСом и сиквелом. Сформированый в квери запрос превышает размер буфера. Значение по умолчанию - 24кБ(значение в настройках сервера указывается в килобайтах). Увеличение размера буфера в параметрах поможет вылечить проблему с превышением размера буфера, но при этом снизит перформанс системы в целом. Такой подход применим как кратковременное решение, чтобы выиграть время и переписать проблемный запрос.
|
|
29.09.2010, 19:40 | #20 |
Участник
|
Цитата:
Если у вас по каким-то причинам кверя не записалась в ивент вьювер, то можно включить трейс(~ -4% от перформанса) и выбрать галочку SQL statements в конфигурации сервера. Подождав до первой ошибки в ивент вьювере, отсортировать трейс по длине квери. |
|
Теги |
ax4.0 |
|
|