Показать сообщение отдельно
Старый 21.10.2005, 17:45   #17  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
В общем, вроде нашел решение.
Вот джоб, которым тестировал:
Код:
static void Tutorial_ChangeFieldId(Args _args)
{
	UtilIdElements uie;
	SQLDictionary dict;
	;
	ttsbegin;
	select forupdate uie
		where uie.name == "Field2" &&
			 uie.parentId == tableNum(Tutorial_ChangeFieldId);
	if (!uie)
		warning("Запись в UtilIdElements не найдена");
	else
	{
		uie.id = 50005;
		uie.update();
	}
//	appl.dbSynchronize(tableNum(Tutorial_ChangeFieldId), false);
//	select forUpdate dict
//		where dict.tabId == tableNum(Tutorial_ChangeFieldId) && dict.fieldId == fieldNum(Tutorial_ChangeFieldId, Field2);
//	if (!uie)
//		warning("Запись в SQLDictionary не найдена");
//	else
//	{
//		dict.fieldId = 50005;
//		dict.update();
//	}
	ttscommit;
}
После его запуска у меня становится имя поля UNKNOWN и теряются свойства (делаю "Восстановить" сразу после запуска).
НО: если тупо после этого сделать синхронизацию таблицы - о чудо, все восстановилось! Id поменялся, данные в таблице остались. Абсолютно интуитивно непонятный механизм - смотрим на какую-то фигню (UNKNOWN), после синхронизации получаем конфетку

То, что закомментировал, оказалось ненужным. Программная синхронизация таблицы не помогает, нужно почему-то обязательно через АОТ делать. Так что решение таково: программно изменяем IDшники полей в UtilIdElements и делаем синхронизацию таблицы. Вуаля!
Спасибо всем, принявшим участие в эксперименте.
__________________
Андрей.