12.04.2011, 15:58 | #1 |
Участник
|
DAX 2009 + SQL2008 ключевые слова, например, StopList недопустимы в названии полей!
Обнаружили (и убили 5 часов, пока локализовали и смогли сформулировать) интересную особенность (багу??)
Проверяли на АХ2009, на Ах4 позже проверим, или сами проверьте и отпишите, плис. Условия для получения: БД в СКЛ должна быть в режиме совместимости с скл 2008 Делаем новую таблицу (мы, очевидно, это на нашей давносуществующей таблице нашли, с которой проблем до того не было и данные даже были). Делаем в ней поле с волшебным именем StopList (история пока умалчивает, какие еще слова - волшебные). Само по себе название поля вполне невинно, отражает смысл бизнес-процесса и вообще соотв БестПрактису. Такая табличка не проходит синхронизацию с ошибкой Описание ошибки SQL: [Microsoft][SQL Native Client][SQL Server]Incorrect syntax near the keyword 'STOPLIST'. При этом сформированный запрос (из лога ругани АХ) в самом СКЛ КвериАнализере тоже не проходит. То есть название полей НЕ ДОЛЖНЫ быть служебными словами, то есть АХ не умеет их оборачивать в некие кавычки-скобочки, как должно. Так что ли? ЛЕЧЕНИЕ: Поставить БД в режим совместимости с СКЛ 2005 - все ок ВОПРОС: Где узнать список этих ключевых слов? Тк переобзывание поля, даже одно, не так уж просто - в коде на него линки, в формах оно в куче мест. И сколько еще таких полей "опасны"? При разработке с нуля все ок, вас сразу пошлет в момент сохранения (сирхронизации) таблицы. Разработчик будет долго думать, что же не так - надеюсь, этот пост его спасет! Получается, что поле Select, Where, Join и прочие тоже опасны в скором времени? Либо, в АХ есть парсер ключевых слов, а о новом СтопЛист оно просто не в курсе. Тогда это надо лечить в самой АХ, тк поддержка СКЛ2008 не полная. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
12.04.2011, 16:11 | #2 |
Участник
|
в ax 3.0 нельзя создать такой джобик
X++: static void Job96(Args _args) { int pt; ; } |
|
12.04.2011, 16:17 | #3 |
Moderator
|
Посмотри класс SysDbInformation. Там есть пример того как система запрашивает у ODBC-драйвера список ключевых слов. (Кстати сам раньше не знал что ODBC-драйвер может такое вернуть). Аксапта всегда использует Native Client 2005ой версии. Рискну предположить что ключевое слово STOPLIST появилось в SQL 2008, и старый native client про него просто не знает.
|
|
12.04.2011, 16:39 | #4 |
Участник
|
Цитата:
|
|
13.09.2012, 13:21 | #5 |
Участник
|
Цитата:
Причём в моём случае аксапта не ругналась в момент добавления поля. И поле c именем COMMIT физически создалось в БД. А вот при удалении этого поля вылезла ошибка "Incorrect syntax near the keyword". |
|
|
|