Форум: "Базы";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизИерархическая база данных, с возможностью вставки записий ... Найти похожие ветки
← →
SmileCoder © (2005-11-22 11:39) [0]Иерархическая база данных, с возможностью вставки записий в нужную позицию списка данных.
Задача такова существует некая основная иерархическая таблица:
Id индивидуалный номер
Код строки
Номер по порядку (PP)
Пораметр 1
Пораметр 2
Пораметр 3
.......
Сумма с запроса из таблицы 2
Сумма с запроса из таблицы 3
Примечание
Возникает проблема, как сделать так чтобы можно былобы вставлять строки в любую позицию списка. Все строки нумируются значением (PP) по этому полю идет и сортировка данных.
Делал следущее на события BeforeInsert таблицы вешал функцию которая генерировала мне номер вставляемой строки, затем в событии AfterPost ПРОПИСЫВАЛ ФУНКЦИЮ ПЕРЕИНДЫКСАЦИИ НИЖЕСТОЯЩИХ СТРОК, то есть значение PP увеличевалось на 1.
Но вот в чем проблема, когда начинает выполняться данное событие, приложение уже фильтрует по PP и получается двойное значение встовляемого поля :(
Возможноли вообще реализовать вставку записи в любое место бд чтобы оно там четко остовалось а не сползало в конец списка?
← →
Ega23 © (2005-11-22 11:41) [1]У тебя всегда Order By есть. И тебя, по-идее, не должно колыхать, каким образом физические данные лежат.
← →
Sergey13 © (2005-11-22 11:45) [2]2SmileCoder © (22.11.05 11:39)
>Возможноли вообще реализовать вставку записи в любое место бд чтобы оно там четко остовалось а не сползало в конец списка?
Нет, нельзя. Разберись хотябы в терминологии.
← →
sniknik © (2005-11-22 12:13) [3]если сортировка все одно есть по полю то сделай его типа double(большое дробное), добавляй запись со значением например автоинкремент * 10 (шаг сделать побольше), а вставляй (Insert) со значением среднего от тех записей между которыми надо вставить.
т.е. надо вставить между pp = 10 и 20 значит (10+20)/2 = 15, при сортированом по этому значению запись будет выглядеть именно вставленной...
тока не увлекайся "вставкой", а то в коне концов придеш к варианту когда снеднее стремиться к 0, или время от времени переинициализируй в таблице эти значения новым шагом только уже не от автоинкремента.
← →
ANB © (2005-11-22 12:15) [4]
> SmileCoder © (22.11.05 11:39)
Можно. Но нужно попрыгать :
1. Запоминаем PP строки, после которй должна идти вставка
2. Генерим PP новой строки
3. Выполняем update Таблица set PP = PP + 1 where PP >= PPновой строки.
4. Вставляем строку.
Все это жутко нехорошо.
← →
msguns © (2005-11-22 12:44) [5]Опять двадцать пять ! Вместо того, чтобы огласить "историю болезни", нам предлагают перечень инструментов, которыми делалась операция. И потом спрашивают "как спасти больного ?".
Где описание предметной области ? Где хотя бы концептуально схема решения (модель данных) ? Что значит "иерархическая база данных" ? Любую БД, содержащую отношения "один-ко-многим" в принципе можно назвать "иерархической".
← →
Sergey13 © (2005-11-22 12:57) [6]2[5] msguns © (22.11.05 12:44)
>БД, содержащую отношения "один-ко-многим" в принципе можно назвать "иерархической".
Судя по сабжу, можно даже просто таблицу в которой предполагается некое упорядочивание (т.е. иерархия в некотором смысле).
← →
ANB © (2005-11-22 13:05) [7]
> msguns © (22.11.05 12:44) [5]
Забей. Товарищь крут и хочет делать так. Пусть делает. Потом будет 2 пути :
1. Понаступав на грабли научится программировать.
2. Не научится программировать еще долго, у нас будет меньше конкуренции.
← →
evvcom © (2005-11-22 14:36) [8]D6 и ADO - это не базы данных! :o) В них ничего нельзя вставить.
← →
SmileCoder © (2005-11-22 17:02) [9]Спасибо.
← →
SmileCoder © (2005-11-22 22:12) [10]Но все таки походу переиндексация PP только этот выход я вижу
Sergey13 © вот не знаю, как можно программировать если наперед знать что "нет нельзя". А если надо, то можно и нужно.
На счет терменалогии как вы еще высветите древовидную структуру в одном стрингриде
аля
1
1.1
1.2
1.2.1
2
2.1
2.2
2.2.1
ANB © Спасибо мой ход мысли был примерно такойже.
← →
ANB © (2005-11-22 22:40) [11]
> SmileCoder © (22.11.05 22:12) [10]
Вообще то это позиционное эрзац-дерево. Так на кой это тебе надо ? Еще тип БД неплохо бы указать.
← →
Smilecoder © (2005-11-22 22:59) [12]Все построено на Access, эта база потом подключена через ODBC и в дальнейшем используется для просмотра через веб интерфей, на делфи же пишу Упраление и заполнение данными этой бд. Чтобы дважды не делать выборку из базы и в модули управления и в веб интерфейсе все решил сделать в Делфи через ADOTabel и уже там формировать основную таблицу в древовидном виде, чтобы потом только по запросу выводить дополнительные связные данные по индексному полю ID.
← →
ANB © (2005-11-22 23:18) [13]Исходная таблица с парентовым деревом ?
← →
ANB © (2005-11-22 23:21) [14]Некузяво ты придумал. Лучше отсортировать дерево на клиенте - это намного быстрее, чем таблицу дергать постоянно, а потом перегрузить все в промежуточную таблицу, раз уж тебе так нужно. Потеряешь на оперативности отображения данных в любом случае.
← →
Smilecoder © (2005-11-22 23:28) [15]Ну да, структуру я расписал выше. основной талицы
ID индификатор строки
PP порядковый номер
Parent родитель
FlagSumm флаг сумарной строки
Code_Item Код строки
Name_work Наименование работы
Executor исполнитель
Ground основание
Primary_budjet первоночальный бюджет
Modify_budjet бюджет с изменениями
Contracts Сумма контрактов по этому ID из
талицы Contracts
Sum_act Сумма по актам
Sum_pay Сумма платежек
Rest_Pay Остаток оплат
← →
Smilecoder © (2005-11-22 23:29) [16]ну это вобщемто тема, но выходит все же двойная работа и там и там данные переколбашывать
← →
ANB © (2005-11-23 00:29) [17]
> Smilecoder © (22.11.05 23:29) [16]
1. Это будет уже не двойная работа, так как с клиента ты просто переложишь данные в таблицу сразу с нужными PP.
2. Не вижу - для чего тебе тут дерево ? На что ссылается Parent ?
← →
Sergey13 © (2005-11-23 09:16) [18]2 [10] SmileCoder © (22.11.05 22:12)
>вот не знаю, как можно программировать если наперед знать что "нет нельзя". А если надо, то можно и нужно.
Я тебе честно ответил на твой вопрос. "вставка записи в любое место бд чтобы оно там четко остовалось " - это утопия. Записи вообще вставляются в таблицы, а не в базу, т.е. в любое место базы вставить невозможно. Физическое расположение записи в таблице не должно тебя волновать вообще. Волновать тебя должно расположение записи в возвращаемом наборе данных, а это далеко не эквивалент таблицы и делается очень просто независимо от физического расположения.
>На счет терменалогии как вы еще высветите древовидную структуру в одном стрингриде
А я таким делом и заниматься не буду. Я нормально спроектирую таблицу и воспользуюсь предназначенным для деревьев компонентом.
← →
msguns © (2005-11-23 09:16) [19]ИМХО, полное непонимание клиент-серверной "идеологии", "шляпочное" знакомство с методами доступа, но все это "обернуто" в дремучее упрямство и непомерное самомнение.
Ну хоть бы почитал что-то, а ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.055 c