AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.10.2007, 15:19   #1  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Как формируется в Axapta название табличного индекса для СУБД?
В первом приближении в Axapta формируется название индекса как "i_<код таблицы в AOT><название индекса в AOT>". По факту обнаружилось, что часть индексов названа как "i_<код таблицы в AOT><часть названия индекса в AOT><код индекса в AOT>". Есть предположение, что такой алгоритм срабатывает для длинных названий индекса в AOT.
Может ли кто-нибудь подсказать точный алгоритм? Есть ли в Axapta функция, которая может по названию индекса в AOT дать его название для СУБД?
______________________________
Axapta 3.0 SP4 KR1; Oracle 9i

Последний раз редактировалось dn; 09.10.2007 в 15:22.
Старый 09.10.2007, 15:45   #2  
Zuzaz is offline
Zuzaz
Участник
 
119 / 18 (1) ++
Регистрация: 22.09.2006
Хм... а зачем вам этим заниматься? может, стоит использовать свою энергию в более мирных целях?
Старый 09.10.2007, 15:54   #3  
exceptor is offline
exceptor
Участник
 
32 / 14 (1) ++
Регистрация: 15.03.2004
Попробуйте:
X++:
DictIndex di = new DictIndex(tableNum(SalesTable), indexNum(SalesTable, SalesIdx));
;
info(di.name(DbBackend::Sql));
__________________
Спокойствие, только спокойствие! (Астрид Линдгрен)
За это сообщение автора поблагодарили: dn (1).
Старый 09.10.2007, 16:05   #4  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Принцип именования объектов БД (таблицы, поля, views) следующий. Если аксаптовское имя имеет длину менее 30 символов, то <имя объекта в БД> = <имя объекта в Аксапте>. Если более, то <имя объекта в БД> = strLeft(<имя объекта в Аксапте>, 25) + <id объекта>.

В случае с индексом к имени еще добавляется префикс "I_<id таблицы>", т.е. <имя индекса в БД> = strLeft("I_<id таблицы>" + <имя объекта в Аксапте>, 25) + <id объекта>.

Проще всего узнать физическое имя объекта использовать соответствующие методы класса DictTable:
name() - для имени таблицы
fieldname() - для имени поля
indexname() - для имени индекса

Все эти методы могут возвращать как аксаптовское имя, так и физическое имя объекта в БД. В последнем случае им надо в качестве параметра передать DbBackend::SQL.

Например, для индекса это можно сделать так:
X++:
new DictTable(tablenum(MyTable)).indexName(indexnum(MyTable, MyIndex), DbBackend::SQL);

Последний раз редактировалось Peter Savintsev; 09.10.2007 в 16:20.
За это сообщение автора поблагодарили: mazzy (5), dn (1).
Старый 09.10.2007, 16:21   #5  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Всем большое спасибо.

Последний раз редактировалось dn; 09.10.2007 в 17:19. Причина: вопрос снят
Теги
наименование объектов бд, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Прямое обращение к СУБД, минуя Axapta murad DAX: Программирование 34 12.03.2007 18:26
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 22.11.2006 15:20
Как узнать название индекса в базе Марамойка DAX: Программирование 3 07.09.2005 14:33
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:47.