Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

скопировать данные из поля с кривым именем [IB5.x, IB6.x]


July ©   (2006-03-16 12:30:00) 

Здравствуйте!
Ситуация такая - в базе под IB5 было поле под названием type (кто-то додумался обозвать, а субд и не препятствовала)
Теперь перешли на IB7, в запросах ругается, что не понимает, что еще за поле такое type - очевидно, зарезервированное слово.
Создала нормальное поле с другим именем, поскольку данные в таблице уже есть, заполнила его пока нулями, но надо туда скопировать актуальные данные из старого поля - этого злосчастного type. Записей несколько сотен, вручную не прокатит :)
Теперь вопрос - можно ли как-нибудь в sql-инструкции обратиться к этому полю, не используя его имени? мож по номеру какому-нибудь из системной таблицы?
Или может подскажете иной какой-нибудь способ скопировать данные из одного поля в другое?
Просто переименовать его не выйдет - много зависимостей, хоть и не индекс.
Иначе остается только достаточно геморный в текущих  обстоятельствах вариант - сгенерировать новую пустую базу с корректным именем поля и полностью переливать в нее ВСЕ данные старой. Очень хотелось бы избежать этого.
Благодарю за внимание :)


July   (2006-03-22 12:14:00) [1]

я тут доступа не имела несколько дней
to Romkin, API, atruhin - ваших сообщения к сожалению увидела только сейчас, не пробовала. Под IB5 в базу лезть у меня уже возможности нет.

Проблему решила следующим образом:
- Добавила, как и собиралась, новое поле.
- Удалила один constraint, который был на старое
- перекомпилила 10 процедур, в которых были ссылки на type (заменила ссылками на новое поле)
- переименовала старое поле средствами IBExpert (он составил такую конструкцию: ALTER TABLE ... ALTER TYPE TO TYPE_OLD;)
- только после этого удалось данные из этого поля вытащить:
 update ... set type_new=type_old

Вот.. зато перегенерировать базу не пришлось :))
Всем спасибо!


atruhin   (2006-03-17 04:23:00) [2]

Решал подобную задачу (именно type), следующим образом:
1. В IBExpert сохраняем все метаданные базы в файл.
2. Поиском по файлу находим все вхожения type (тригера, процедуры, индексы), и все эти объекты копируем во второй файл.
3. В начало файла помещаем, примерно такое:
  ALTER TABLE MENU_GROUPS ADD TIPE SMALLINT
  update menu_groups set TIPE = TYPE
4. Для каждого объекта создаем в начале файла: drop procedure ..., drop triger ... и т.д.
4. В конце файла удаляем поле.

Накатываем скрипт на базу, под IB5, наслаждаемся :)


API   (2006-03-16 19:31:00) [3]

Попробуйте [type]


Romkin   (2006-03-16 18:28:00) [4]

update  RDB$RELATION_FIELDS set rdb$field_name = 'REC_TYPE'
where rdb$relation_name = 'MYTABLE' and rdb$field_name = 'TYPE';
Только учти, что констрейнтов и зависимостей на это поле не должно быть :)
А посмотреть поле - как раз в этой таблице


July   (2006-03-16 17:30:00) [5]

Завтра попробую.
Сколько там комбинаций разных регистров 4-х букв? ;)))))
А точно какой регистр был при создании нигде не увидеть?
А то IBExpert все везде заглавными показывает..


Anatoly Podgoretsky   (2006-03-16 17:03:00) [6]

Так возможно требуется точное соблюдение регистра


July   (2006-03-16 16:59:00) [7]

update <tbl> set type_new=<tbl>."type"
...
Token unknown - line 1, char 52.
"type".

:(


Anatoly Podgoretsky   (2006-03-16 14:05:00) [8]

July   (16.03.06 13:32) [3]
Именно так.


July   (2006-03-16 13:32:00) [9]


> "type"


В смысле, взять в запросе в кавычки название поля?
Попробую...


Desdechado   (2006-03-16 13:25:00) [10]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1142418789&n=1


Anatoly Podgoretsky   (2006-03-16 12:32:00) [11]

"type"


Наверх

Титульная страница Поиск, карта сайта Написать письмо