Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

Иерархическая база данных, с возможностью вставки записий ...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.051 c
14-1135465488
Bakset
2005-12-25 02:04
2006.01.22
Вопрос про сервисы для гуру...


3-1132810047
megaspring
2005-11-24 08:27
2006.01.22
Запросы&Access


1-1134848905
Mmmaloy
2005-12-17 22:48
2006.01.22
Симуляция нажатия кнопки на DBGrid


11-1117688514
azsd
2005-06-02 09:01
2006.01.22
KOL+FPC 2.0 return 39 errors in converted kol.pas


1-1134659915
Andy BitOff
2005-12-15 18:18
2006.01.22
Проблемы с Printer.PageWidth/PageHeight