04.01.2007, 16:35 | #1 |
Участник
|
Всегда ли пользовательские поля добавляются в середину?
Пользователи постоянно присылают нам MS SQL базы со своими полями, которые добавлены случайным образом в середину существующих таблиц. Акзапта всегда добавляет поля в середину или существует какой-то трюк, позволяющий добавлять поля в конец?
|
|
04.01.2007, 17:51 | #2 |
Участник
|
Извините за вопрос, но спам задолбал вконец...
Кому это "нам"? Что за пользователи рассылают базы? Чьи базы присылают? |
|
04.01.2007, 17:55 | #3 |
Участник
|
По сути вопроса...
Цитата:
Если новое поле записано, то его порядок изменить нельзя - Аксапта не делает Alter Table для изменения порядка полей в самой таблице. Однако! Если у таблицы определен кластерный индекс и этот кластерный индекс содержит пользовательские поля, то синхронизация/rebuild может привести к тому, что порядок полей будет изменен. |
|
04.01.2007, 19:56 | #4 |
Участник
|
А если пользовательские поля все-таки рассыпаны по SALESTABLE или там SALESLINE как горох, то что надо сказать клиенту, чтобы он смог добавлять поля именно в конец таблицы? Экстракты, написанные через SELECT * ломаются, хотя мы от них и избавляемся по мере возможности. Проблема в том, что эта возможность есть не всегда. Кажется, в Акзапте нет своих кластерных индексов, а клиенты наши новых не создают. Получается какая-то фигня, раз поля добавляются посредине.
Я не понял про спам, поясните если это важно. |
|
09.01.2007, 18:48 | #5 |
Участник
|
Ну вот, очередной клиент прислал свою кастомизированную базу. Мало того, что новые поля рассыпаны по таблицам где попало, так и существующие поля изменили свое расположение примерно в 20% измененных таблиц. Есть даже таблицы, которые отличаются только положением 1-3х стандартных полей. Это Axapta 4.0.
|
|
09.01.2007, 19:35 | #6 |
Модератор
|
это, простите, проблема не Аксапты, а культуры разработки (или в данном случае - ее отсутствия)
учитывая, что от клиента к клиенту состав закупленных лицензий будет отличаться, а процедуру включения-отключения лицензионных ключей можно повторять многократно, на порядок следования столбцов в результатах запроса SELECT * FROM могут полагаться только законченные оптимисты
__________________
-ТСЯ или -ТЬСЯ ? |
|
10.01.2007, 12:11 | #7 |
Британский учённый
|
Цитата:
Нарушение этой последовательности происходит при удалении и импорте таблицы заново. Если таблица переписывается то Id не меняется. Тут есть еще такая загвоздка что если импорт экспорт идет без указания Id, то при экспорте поля записываются в XPO в той последовательности в которой они отображаются на текущий момент в Аксапте, а при импорте Id поля принимается по порядку начиная с 50001. Т.е. если Вы создадите новое поле в табличке, экспортируете ее, удалите и заново импортируете то Id будут заданы сизнова. Таким образом можно выставить последовательность полей как это требуется и пересоздать табличку через импорт-удаление-экспорт. Очевидно что бы не было проблем с положением полей нужно делать экспорт и импорт с Id. В Сиквеле поля хранятся в такой же последовательности как и в Аксапте (т.е. по возрастанию Id поля) |
|
10.01.2007, 12:22 | #8 |
Участник
|
Подправьте в первом предложении, по возрастанию.
|
|
10.01.2007, 12:32 | #9 |
Британский учённый
|
|
|
10.01.2007, 13:08 | #10 |
Member
|
Цитата:
Сообщение от Link
...
(может есть другой способ но у меня работает только после перезапуска) ...
__________________
С уважением, glibs® |
|
11.01.2007, 00:25 | #11 |
Участник
|
Это вы ведете речь об объектах интерфейса АОС, а я о физических полях в базах.
Конечно было бы здорово, если бы вместо SELECT * везде использоваись вызовы интерфейсов или SELECT по списку полей, но не все в этом мире совершенно и существуют программы, написанные до нас. Похоже вырисовывается такая картина: если поля добавляются через SQL и делаются доступными в Акзапте, то они добавляются в конец. Если же их добавляют через Enterprise Manager или в самой Акзапте, то их размазывает по таблице. Решения этой проблеме нет. |
|
11.01.2007, 00:36 | #12 |
Участник
|
А какое решение вы считали бы решением этой проблемы?
Jab Straight, либо читайте матчасть про конфигурационные и лицензионные ключи... Либо подумайте еще раз над сообщением Vadik. |
|
11.01.2007, 16:11 | #13 |
Британский учённый
|
|
|
11.01.2007, 17:50 | #14 |
Британский учённый
|
Цитата:
Цитата:
Похоже вырисовывается такая картина: если поля добавляются через SQL и делаются доступными в Акзапте, то они добавляются в конец. Если же их добавляют через Enterprise Manager или в самой Акзапте, то их размазывает по таблице. Решения этой проблеме нет.
|
|
11.01.2007, 18:03 | #15 |
Модератор
|
Цитата:
Вы обозревателем таблиц проверяете? если да - напрасно
__________________
-ТСЯ или -ТЬСЯ ? |
|
11.01.2007, 18:18 | #16 |
Британский учённый
|
|
|
15.01.2007, 11:10 | #17 |
Модератор
|
- Добавляем в произвольную таблицу два поля: Field1 и Field2
- Убеждаемся, что добавленные поля имеют идентификатор (colid в syscolumns или ordinal_position в INFORMATION_SCHEMA.COLUMNS) больше, чем RecId и DataAreaId. О порядке вывода полей в порядке, определяемом аксаптовским FieldId речи уже быть не может. - Отключаем Field1, присвоив ему конфигурационный ключ SysDeletedObjects - Включаем его обратно О разных лицензиях в "клиентских базах" (и разной структуре таблиц) уже отписал раньше
__________________
-ТСЯ или -ТЬСЯ ? |
|
15.01.2007, 16:03 | #18 |
Британский учённый
|
Спасибо Vadik за ответ. Попробовал как Вы написали, получил :
Цитата:
name colid FIELD1 1 FIELD2 2 И из view: name ordinal_position FIELD1 1 FIELD2 2 В Аксапте эти поля имеют такие Id: FIELD1 5001 FIELD2 5002 Что я делаю не так? Цитата:
О порядке вывода полей в порядке, определяемом аксаптовским FieldId речи уже быть не может.
- Отключаем Field1, присвоив ему конфигурационный ключ SysDeletedObjects - Включаем его обратно Цитата:
О разных лицензиях в "клиентских базах" (и разной структуре таблиц) уже отписал раньше
|
|
15.01.2007, 17:53 | #19 |
Участник
|
А когда вы со своей табличкой экспериментировали в ней данные были?
Axapta, если данных в таблице нет, просто пересоздает ее заново (drop table ..., create table ... ), выстраивая поля в ней в порядке FieldId. Если данные есть, то добавляет или удаляет столбцы (alter table ... add column ..., alter table ... drop column ...).
__________________
Axapta v.3.0 sp5 kr2 |
|
15.01.2007, 17:55 | #20 |
Британский учённый
|
Нет только с пустой эксперментировал. Спасибо AndyD, попробую.
|
|