Summary: | ODBC escape convert error | ||
---|---|---|---|
Product: | SELTA@Etersoft | Reporter: | Станислав Коробейников <stas> |
Component: | Парсер | Assignee: | Калюхович Юрий <goga> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | minor | ||
Priority: | P4 | CC: | goga, lav |
Version: | 1.1.0 | ||
Target Milestone: | версия 1.0.4 | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 6158 |
Description
Станислав Коробейников
2011-05-19 16:15:37 MSK
(В ответ на comment #0) > Есть только лог ODBC: > UCHAR * 0x00FD5648 [ -3] "set rowcount 1 > select * from SC133(NOLOCK INDEX=PDESCR) where PARENTID=? and DESCR>='\ 8' and > substring(DESCR,1, > 1)='\ 8' order by PARENTID,ISFOLDER, DESCR,ROW_ID set rowcount 0\ 0" подозреваю, что из-за бэкслэша. надо еще посмотреть что в логе сельты К сожалению не делал для другой баги и не логов SELTA нет. (В ответ на comment #1) > > UCHAR * 0x00FD5648 [ -3] "set rowcount 1 > > select * from SC133(NOLOCK INDEX=PDESCR) where PARENTID=? and DESCR>='\ 8' and > > substring(DESCR,1, > > 1)='\ 8' order by PARENTID,ISFOLDER, DESCR,ROW_ID set rowcount 0\ написал тест для odbc, но воспроизвести пока не смог. воспроизвел ошибку. нужно Отчеты -> Специализированные -> Акт сверки, Контрагент - набрать один символ, затем backspace, и получается ошибка только не очень понятно почему. в логах сельты - символ "точка" (.) и ошибка трансляции в трассировке - вообще '\ 8' кажется, что нажатие backspace передается как символ, а не затирает последний символ в строке поиска - даже простое нажатие backspace ведет к падению 1С. это объясняет и ошибку в парсере - он ругается на кавычку, посмотрел в hex: действительно, там символ 0x08, а это и есть backspace в ascii; непонятно только, как такое возможно... надо посмотреть в mssql и виндовом odbc (В ответ на comment #5) > посмотрел в hex: действительно, там символ 0x08 wine(cellar) + mssql(win2008-mssql2005, virtualbox) не воспроизвелось. ошибка где-то в odbc? т.к. в сельту уже приходит неправильный запрос можно решить, если добавить в грамматику ''{&0008}'' в определение строки. но это будет хак. истинной причины я не понял, почему в парсер попадает символ 0x08. проверил, это не SQLBindParameter(). и не понятно, почему mssql-odbc нормально отрабатывает (В ответ на comment #7) > можно решить, если добавить в грамматику ''{&0008}'' в определение строки. но > это будет хак. Мне не кажется, что это хак, если MS SQL считает, что 0x08 символ это символ строки, то SELTA тоже может так считать. > истинной причины я не понял, почему в парсер попадает символ 0x08. проверил, > это не SQLBindParameter(). и не понятно, почему mssql-odbc нормально > отрабатывает Мне показалось, что попадает через SQLExecDirect напрямую от 1с (DESCR>='\ 8') (В ответ на comment #8) > Мне не кажется, что это хак, если MS SQL считает, что 0x08 символ это символ > строки, то SELTA тоже может так считать. Действительно, в трассировке (wine+mssql) тот же символ - '\ 8' , т.е. для odbc и mssql это нормально, получать backspace как строку закоммитил, сделал revision 9, выложил на ftp. в 1С больше не воспроизводится. Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять. |