09.10.2007, 15:19 | #1 |
Участник
|
Как формируется в 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 |
Участник
|
Хм... а зачем вам этим заниматься? может, стоит использовать свою энергию в более мирных целях?
|
|
09.10.2007, 15:54 | #3 |
Участник
|
Попробуйте:
X++: DictIndex di = new DictIndex(tableNum(SalesTable), indexNum(SalesTable, SalesIdx)); ; info(di.name(DbBackend::Sql));
__________________
Спокойствие, только спокойствие! (Астрид Линдгрен) |
|
|
За это сообщение автора поблагодарили: dn (1). |
09.10.2007, 16:05 | #4 |
Участник
|
Принцип именования объектов БД (таблицы, поля, 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; 09.10.2007 в 17:19. Причина: вопрос снят |
|
Теги |
наименование объектов бд, ax3.0 |
|
|