21.12.2006, 10:44 | #1 |
Участник
|
Таблицы аксапты и ключевые слова MSSQL
В общем-то давненько наткнулся на такую вот проблемку:
Аксапта позволяет создавать в АОТ таблицы у которых имена филдов совпадают с ключевыми словами БД. Такие как update, insert, close и т.д. Создать, то позволяет, но вот синхронизироваться с БД не может, т.к. ошибочка синтаксиса выходит. Движок аксапты почему-то названия филдов в кавычки не берет. Собственно когда в первый раз столкнулся с этой проблемой - создавал табличку сам и после не долгих раздумий просто изменил название поля. Но сейчас ситуация такая, что есть визар по созданию таблицы для пользователя аксапты и вот тут то нужно отслеживать все ити ключевые слова. Поискал в аксапте по макросам но не нашел. Может кто знает, есть ли в аксапте табличка в которох может хранится информация о ключевых словах БД. Так что бы можно было ее заюзать и не делать свой велосипед и собственно поддерживать его. |
|
21.12.2006, 11:15 | #2 |
Роман Долгополов (RDOL)
|
Таблица SQLSYSTEMVARIABLES строка KEYWORDS
Класс SqlDatabaseInit инициализит эту табличку, но только один раз при первом натравливании аксапты на базу |
|
|
За это сообщение автора поблагодарили: kashperuk (2). |
21.12.2006, 12:12 | #3 |
Участник
|
В общем-то данные из этой строки таблицы используются ядром Axapta'ы для разруливания таких ситуаций. Можно добавить нужные ключевые слова, тогда при создании полей будет добавляться префикс из стороки QUOTEPRE (по умолчанию без префикса) и суффикс из QUOTEPOST (по умолчанию суффикс подчеркивание "_").
Тут засада такая - размер этого поля 254 символа, соответственно не все ключевые слова можно включить (изменять его размер не пробовал) Только не забудьте после добавления ключевых слов перезапустить AOS'ы
__________________
Axapta v.3.0 sp5 kr2 |
|
21.12.2006, 12:19 | #4 |
Banned
|
Только это еще не все. Не пробуйте создавать поля или таблицы с именами, совпадающими с внутренними функциями типа TypeId. Такие поля (Table1.TypeId) кое-где будут работать, а кое-где не компилируются.
|
|
21.12.2006, 12:21 | #5 |
Участник
|
Там похоже явно не все ключевые слова:
PROC,SUM,LINENO,OPEN,TRANSACTION,BY,PERCENT,PROCEDURE,CURRENT_DATE,CURRENT_TIME,CURRENT_USER,DUMMY,PERMANENT,PIPE И есть ли способ из аксапты причитать таблицы которые лежать только в сервере БД не использую ADODB и подобного |
|
21.12.2006, 12:26 | #6 |
Роман Долгополов (RDOL)
|
1. Не все
2. UserConnection, ResultSet |
|
21.12.2006, 12:31 | #7 |
Участник
|
Чтение этой таблицы вам не поможет (хотя посмотреть, как это делается можно в приведенном выше классе SqlDatabaseInit).
То, что в ней есть и так будет обрабатываться самой Axapta'ой, а для остального - создайте класс, в котором пропишите keywords из BOL'а для MS SQL (или создайте таблицу, где пропишите их. Для Oracle' можно воспользоваться вьюшкой V$RESERVED_WORDS) и возвращайте результат проверки
__________________
Axapta v.3.0 sp5 kr2 |
|
21.12.2006, 13:59 | #8 |
сибиряк
|
Цитата:
__________________
С уважением, Вячеслав. |
|
21.12.2006, 14:49 | #9 |
Модератор
|
а если вместо ковыряния системных таблиц перечитать
Developer's Best Practice Handbook \ Naming conventions ?
__________________
-ТСЯ или -ТЬСЯ ? |
|
21.12.2006, 16:30 | #10 |
Участник
|
Вадим, ты имеешь в виду
Цитата:
The reserved words are listed below the System Documentation node in the Application Object Tree
__________________
Axapta v.3.0 sp5 kr2 |
|
21.12.2006, 16:49 | #11 |
Модератор
|
чуть выше
Цитата:
General rules
Names must be logical and descriptive. Цитата:
Name structure
Where possible, application object names should be constructed hierarchically from three basic components: {business area name} + {business area description} + {action performed (for classes) or type of contents (for tables)} Examples: CustInvoicePrintout PriceDiscAdmCopy PriceDiscAdmDelete PriceDiscAdmSearch PriceDiscAdmName PriceDiscAdmTrans
__________________
-ТСЯ или -ТЬСЯ ? |
|
21.12.2006, 20:16 | #12 |
Участник
|
Напомню, что таблицы бутут создаваться из визарда обычными пользователями, которые понятия не имеют о бестпрактисах.
|
|
21.12.2006, 20:34 | #13 |
Banned
|
Ну и присваивайте автоматически префикс всем полям и названиям таблиц. Так будет их потом проще найти и вычистить.
|
|
|
|