![]() |
Модераторы: Akella |
![]() ![]() ![]() |
|
Sed0Y |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
есть у меня таблица (в firebird), с полями FID, FPARENT_ID, FTEXT
есть некие данные типа:
нужно скопировать в ту же таблицу что бы бала та же структура только новые ИД и парентИД
как это реализовать - Можно программно, можно ХПками? |
||||
|
|||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
Т.е. не меняя "вхождения" одних элементов в другие нужно все значения первичных и внешних ключей увеличить на 9?
-------------------- Слава Україні! |
|||
|
||||
Sed0Y |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
нет, увеличивать их не нужно нужно создать такую же структуру, только что бы ли другие ИД (gen_id()) |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
Что понимается под структурой?
Структура таблицы в БД? Или же структура дерева хранимых в БД элементов? -------------------- Слава Україні! |
|||
|
||||
Sed0Y |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
структура дерева хранимых в БД элементов |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
-------------------- Слава Україні! |
|||
|
||||
Sed0Y |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
Gluttton, вы меня конечно простите, но я не на столько сильно владею СКЛ - я не понимаю :( особенно как рекурсивно обойти и обновить элементы... ![]() если Вас не затруднит, не могли бы пример для меня сделать? а то это все дело мне нужно на завтра до вечера доделать.... |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
Я задачу так и не понял! Что дано - ясно (таблица, ключи, тестовые данные), а вот, что нужно сделать я так и не могу понять?
Что значит другие? Откуда они беруться? Расчитываются? Изменить нужно все записи или только определенные? -------------------- Слава Україні! |
|||
|
||||
Sed0Y |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
Вот картинка, может так будет понятно: 1- картинка, это у наст есть уже что-то 2 - мы ее хотим сохранить как отдельную 3 - мы имеем 2-к орг структуры с одинаковой структурой (дерево) ![]() |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
Я так понимаю, что есть некоторая БД, а в ней таблица с древовидной структурой.
Некое клиентское приложение обеспечивает доступ к данным этой таблицы (судя по всему с возможностью модификации данных)... Задача сохринить в БД внесенные на стороне клиентского приложения изменения... Это то, что я понял из картинки ![]() -------------------- Слава Україні! |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
Если FPARENT_ID является внешним ключем и на него наложено ограничение каскадного обновления, то вопрос обновления ключевых полей решается автомитически на уровне СУБД и это вообще не вопрос.
Ну а если нет, то хочу заметить, что если вопросы: - удаление узла со всеми его дочерними элементами; - переименование отдельного узла; - применение маски при переименовании к узлу и его дочерним элементам; - удаление узла со всеми его дочерними элементами. Представляются мне решаемыми (и ответ на них можно найти по приведенной мною ссылке). То вот задача "перезаписи" ключевых полей у меня и в голове не укладывается (собственно говоря как и то зачем это нужно ![]() Дело в том, что для реализации задачи необходиомо обходить дерево строго сверу-вниз! Т.к. при случайном доступе к элементам мы рискуем изменить первичный ключ поля после того, как он уже был "учтен" запросом и был задан как код родительского элемента. Т.о. (первое что приходит в голову) необходимо создать временную таблицу, в которой элементы основной таблицы будут размещены сверху-вних (по некоторому дополнительному полю), в данном случае порядок записией совподает с первичным ключем. После необходимо создать копию исходной таблицы и добавить в неё поле для нового первичного ключа. Затем в цикле необходимо для всех записей вызывать некую процедуру, которая бы в этой новой таблице последовательно перебирала записи сверху-вниз и ориентируясь по старому первичному ключу обновляла бы записи. Всё это выглядет более чем сумбурно, но ничего более простого мне в голову не приходит... -------------------- Слава Україні! |
|||
|
||||
Sed0Y |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
все - спасибо, решил проблему, создал темповую таблицу, туда все запихнул проабдейтил и выгрузил куда нужно
![]()
|
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Interbase" | |
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |