06.04.2004, 18:08 | #1 |
Учаснег
|
Axaptra 3.0, странный трабл - или может у меня в глазах троится?
Продолжаются траблы с переводом с 2.5 на 3.0 - предыдущие серии см. на axforum.info
С функционалом вроде закончил, теперь тренируюсь с перетаскиванием базы. Беру бэкап базы 2.5 , разворачиваю ее как новую БД, присоединяюсь к ней в трешке, провожу процедуру Upgrade-а. Проблема в том, что в одну таблицу - а именно в InventTable - добавили одно поле. Ну не удержались Ну очень надо было... Из-за этого на этапе синхронизации Аксапта требует эту таблицу пересоздать, а все данные теряются. Т.е. сразу после синхронизации надо их экспортировать из 2.5 и импортировать в 3.0 - именно ПОСЛЕ синхронизации и ДО post-synchronize update. Но этот этап уже почти пройдет: все экспортируется и импортируется как надо. Беда начинается дальше. Как только открываешь ФОРМУ InventTable после завершения update-а - все items в ней представлены в тройном экземпляре. В базе данных они, естественно, в единственном числе. Очевидно, проблема происходит из-за того, что в форме таблица InventTablе связана с тремя датасорсами таблицы InventTableModule. И по какой-то необъяснимой причине вместо того, чтобы выводить одну строчку на каждую запись InventTable, как ей положено - она выводит одну на каждую запись InventTableModule. Как такое возможно - я не понимаю... Разумеется, параметры формы никто не трогал, еще вчера (!!!), с "предыдущей" базой, все было хоккей. Специально проверил - за прошедшие 24 часа никаких изменений в код и параметры формы и таблиц внесено не было... Может было у кого что-то подобное? Посоветуйте, люди добрые (и злые тоже ) ПыСы Специально для "юмористов": мамой клянусь, не пил ничего вчера да и не только я эти "троения" вижу
__________________
Strictly IMHO & nothing personal |
|
06.04.2004, 18:15 | #2 |
Учаснег
|
Да, и еще, попутно, заметил тут.
У InventTableModule как-то странно прописаны relations: InventTableModule.ItemId == InventTableModule.ItemId InventTableModule.ModuleTYpe == InventTableModule.ModuleType ??? Это что же - она сама с собой связана? Как это? Зачем так?
__________________
Strictly IMHO & nothing personal |
|
06.04.2004, 23:54 | #3 |
Участник
|
про связь саму с собой здесь писал EVGL.
это делается чтобы переименование работало. (пора в FAQ заносить ) Про подъем модификаций - похоже надо править процедуру апгрейда. чтобы оно понимало usr-поле. |
|
07.04.2004, 00:26 | #4 |
Учаснег
|
Цитата:
про связь саму с собой здесь писал EVGL.
это делается чтобы переименование работало. Цитата:
Про подъем модификаций - похоже надо править процедуру апгрейда. чтобы оно понимало usr-поле.
Но это все интерес попутный. Самый главный вопрос - че с троением делать-та ?
__________________
Strictly IMHO & nothing personal |
|
07.04.2004, 00:36 | #5 |
Участник
|
AKIS, прости, Акспты нет рядом чтобы проэкспериментировать...
А ты импортируешь только InventTable или вместе с InventTableModule? Прошу прощения, если болтнул глупость.
__________________
с уважением, Дмитрий. |
|
07.04.2004, 03:18 | #6 |
Учаснег
|
Привет!
Вопрос на самом деле никакая не "глупость", а очень даже правильный!!!! Дело в том, что когда Аксапта дроПит InventTable во время синхронизации (перед этим издевательски предлагая выбор "или дроПим, или все нафиг") - то одновременно очищается и InventTableModule! Видимо, она считает что раз таблицы связаны, и одна очистилась - то неча мусор хранить в другой. Довольно смелое предположение, надо сказать... В общем, я теперь ищу способ поднимать содержимое таблиц не в Аксапте, а прямо в сиквел-сервере, дабы избежать таких вот дурацких ситуаций... Может кстати, дело в этом, в том что я их поднял в Аксапте, и оно поднялось неправильно...
__________________
Strictly IMHO & nothing personal |
|
07.04.2004, 09:52 | #7 |
----------------
|
2 AKIS
Информация о структуре таблиц в Аксапте хранится в 2х местах: 1. Само приложение 2. Табличка SQLDictionary Если данные в этих источниках не совпадают происходит синхронизация. Если сильно не совпадают, то происходит удаление и пересоздание объекта. А если все это не совпадает со структурой на SQL, то при синхронизации (и даже просто при чтении из БД) происходит exception. Важным моментом является совпадение ID таблиц и полей. Так как при экспорте проектов из Аксапты 2.5 id объектов не попадает в файл, то при импорте в 3.0 Аксапта берет просто следующий свободный. И в результате id в приложении не совпадают с данными в SQLDictionary (в БД от 2.5). |
|
07.04.2004, 15:34 | #8 |
Учаснег
|
Wamr!
Спасибо за информацию
__________________
Strictly IMHO & nothing personal |
|
08.04.2004, 18:44 | #9 |
Учаснег
|
Сегодня наконец закончил еще один апдейт, с новой базой. Троение исчезло. Похоже, действительно дело было в некорректной загрузке InventTable и/или InventTableModule. Т.е. важно не только то какие данные грузятся, но и то КАК ИМЕННО они грузятся....
Попутно научился наконец импортировать-экспортировать данные непосредственно в сиквеле. Оказалось не так уж сложно В какой-то момент даже возникла шальная мысль сделать линки всех таблиц "старой" БД (2.5) на "новую"(3.0) - чтобы данные автоматически перетекали. Возни правда много... Еще раз всем спасибо за ценные советы...
__________________
Strictly IMHO & nothing personal |
|
08.04.2004, 18:57 | #10 |
Banned
|
Кстати, в 90% случаев помогает функция SQL Administration/Check/Synchronize, которая и занимается тем, что корректирует неверные ID полей, пытаясь сопоставить поля по названию.
Функцию желательно запускать после Upgrade pre synchronize, но до Synchronize на сбойных таблицах. |
|
|
|