|  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 | 
|  | 
| 
 |