Показать сообщение отдельно
Старый 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).