Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2013, 16:06   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Firebird. Исправить значения всех генераторов.

Привет, коллеги.
Запарился переводить целую кучу баз firebird-а с версии 1.5 на 2.5.
В принципе, все получилось, но засада в том, что на все таблицы триггеры генерируют новые значения генераторов ( во сказал). Поэтому при создании бэкапа значения генераторов не записываю. А при восстановлении из бэкапа временно отключаю все триггеры. Далее нужно записать правильные значения генераторов, т.е. получить максимальное значение из поля INC (оно именно так называется во всех таблицах), добавить к нему единицу и записать в значение генератора. Таблиц много и писать все вручную как-то несерьезно. Хотелось бы сделать хранимку и выполнить все в цикле.

Код:
--достаю все имена таблиц

for select RDB$RELATION_NAME from RDB$RELATIONS
where (RDB$SYSTEM_FLAG = 0) AND (RDB$RELATION_TYPE = 0)
order by RDB$RELATION_NAME
into TABLE_NAME do
begin

-- Здесь пытаюсь исправить значение генератора


end
Значение генератора в ХП записываю примерно так:
Код:
EXECUTE STATEMENT(GEN_ID(GEN_ADDRESS_ID, (select max(address.inc)+1 from ADDRESS) - GEN_ID(GEN_ADDRESS_ID, 0)));
При отладке команды выше ошибка не вылетает, но срабатывает Стоп. Хотя генератор, вроде, записывается нормально. Хз, что-то здесь не то...

Но как вместо имени таблицы подставить переменную :TABLE_NAME ?

А имена генераторов у меня всегда выглядят так:
Код:
'GEN_'||:TABLE_NAME ||'_ID'
т.е.
GEN_ADDRESS_ID
Пробовал собрать строку в переменную varchar и выполнить её как EXECUTE STATEMENT(...). Тоже не фурычит.

Как исправить значения генераторов в цикле? Не может быть, чтобы такое никто не делал.

Понятно написал?
_SERGEYX_ вне форума Ответить с цитированием
Старый 15.10.2013, 16:48   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

ALTER SEQUENCE тоже не катит?

Может дело в этом http://groups.yahoo.com/neo/groups/f...s/topics/35935
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить программу нахождения всех Эйлеровых циклов в графе заданном матрицой смежности TrIcKsTeR13r C# (си шарп) 0 13.12.2011 12:13
Остергайтесь платных архивов и их генераторов hon Безопасность, Шифрование 0 01.07.2011 22:35
Исправить код сворачивания всех окон niki2012 Общие вопросы Delphi 11 14.01.2011 23:33
Firebird. Автоматическое внесение значения в поле при добовлении SNUPY БД в Delphi 11 11.12.2010 14:34
запись пустого значения в блоб поле в FireBird Lokos БД в Delphi 0 23.06.2010 07:01