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

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

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


SmileCoder ©   (2005-11-22 11:39:00) 

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

 Задача такова существует некая основная иерархическая таблица:
Id индивидуалный номер
Код строки
Номер по порядку (PP)
Пораметр 1
Пораметр 2
Пораметр 3
.......
Сумма с запроса из таблицы 2
Сумма с запроса из таблицы 3
Примечание


Возникает проблема, как сделать так чтобы можно былобы вставлять строки в любую позицию списка. Все строки нумируются значением (PP) по этому полю идет и сортировка данных.
Делал следущее на события BeforeInsertтаблицы вешал функцию которая генерировала мне номер вставляемой строки, затем в событии AfterPostПРОПИСЫВАЛ ФУНКЦИЮ ПЕРЕИНДЫКСАЦИИ НИЖЕСТОЯЩИХ СТРОК, то есть значение PP увеличевалось на 1.
Но вот в чем проблема, когда начинает выполняться данное событие, приложение уже фильтрует по PP и получается двойное значение встовляемого поля :(
Возможноли вообще реализовать вставку записи в любое место бд чтобы оно там четко остовалось а не сползало в конец списка?


msguns   (2005-11-23 09:16:00) [1]

ИМХО, полное непонимание клиент-серверной "идеологии", "шляпочное" знакомство с методами доступа, но все это "обернуто" в дремучее упрямство и непомерное самомнение.
Ну хоть бы почитал что-то, а ?


Sergey13   (2005-11-23 09:16:00) [2]

2 [10] SmileCoder ©   (22.11.05 22:12)
>вот не знаю, как можно программировать если наперед знать что "нет нельзя". А если надо, то можно и нужно.  
Я тебе честно ответил на твой вопрос. "вставка записи в любое место бд чтобы оно там четко остовалось " - это утопия. Записи вообще вставляются в таблицы, а не в базу, т.е. в любое место базы вставить невозможно. Физическое расположение записи в таблицене должно тебя волновать вообще. Волновать тебя должно расположение записи в возвращаемом наборе данных, а это далеко не эквивалент таблицы и делается очень просто независимо от физического расположения.

>На счет терменалогии как вы еще высветите древовидную структуру в одном стрингриде
А я таким делом и заниматься не буду. Я нормально спроектирую таблицу и воспользуюсь предназначенным для деревьев компонентом.


ANB   (2005-11-23 00:29:00) [3]


> Smilecoder ©   (22.11.05 23:29) [16]

1. Это будет уже не двойная работа, так как с клиента ты просто переложишь данные в таблицу сразу с нужными PP.
2. Не вижу - для чего тебе тут дерево ? На что ссылается Parent ?


Smilecoder   (2005-11-22 23:29:00) [4]

ну это вобщемто тема, но выходит все же двойная работа и там и там данные переколбашывать


Smilecoder   (2005-11-22 23:28:00) [5]

Ну да, структуру я расписал выше. основной талицы
ID                               индификатор строки
PP                               порядковый номер 
Parent                         родитель 
FlagSumm                   флаг сумарной строки
Code_Item                   Код строки
Name_work                 Наименование работы
Executor                     исполнитель
Ground                       основание
Primary_budjet             первоночальный бюджет 
Modify_budjet               бюджет с изменениями
Contracts                     Сумма контрактов по этому ID из
                                талицы  Contracts
 
Sum_act                     Сумма по актам
Sum_pay                     Сумма платежек 
Rest_Pay                     Остаток оплат


ANB   (2005-11-22 23:21:00) [6]

Некузяво ты придумал. Лучше отсортировать дерево на клиенте - это намного быстрее, чем таблицу дергать постоянно, а потом перегрузить все в промежуточную таблицу, раз уж тебе так нужно. Потеряешь на оперативности отображения данных в любом случае.


ANB   (2005-11-22 23:18:00) [7]

Исходная таблица с парентовым деревом ?


Smilecoder   (2005-11-22 22:59:00) [8]

Все построено на Access, эта база потом подключена через ODBC и в дальнейшем используется для просмотра через веб интерфей, на делфи же пишу Упраление и заполнение данными этой бд. Чтобы дважды не делать выборку из базы и в модули управления и в веб интерфейсе все решил сделать в Делфи через ADOTabel и уже там формировать основную таблицу в древовидном виде, чтобы потом только по запросу выводить дополнительные связные данные по индексному полю ID.


ANB   (2005-11-22 22:40:00) [9]


> SmileCoder ©   (22.11.05 22:12) [10]

Вообще то это позиционное эрзац-дерево. Так на кой это тебе надо ? Еще тип БД неплохо бы указать.


SmileCoder   (2005-11-22 22:12:00) [10]

Но все таки походу переиндексация PP только этот выход я вижу
Sergey13 ©  вот не знаю, как можно программировать если наперед знать что "нет нельзя". А если надо, то можно и нужно.  
На счет терменалогии как вы еще высветите древовидную структуру в одном стрингриде
аля
1
1.1
1.2
1.2.1
2
2.1
2.2
2.2.1

ANB ©  Спасибо мой ход мысли был примерно такойже.


SmileCoder   (2005-11-22 17:02:00) [11]

Спасибо.


evvcom   (2005-11-22 14:36:00) [12]

D6 и ADO - это не базы данных! :o) В них ничего нельзя вставить.


ANB   (2005-11-22 13:05:00) [13]


> msguns ©   (22.11.05 12:44) [5]

Забей. Товарищь крут и хочет делать так. Пусть делает. Потом будет 2 пути :
1. Понаступав на грабли научится программировать.
2. Не научится программировать еще долго, у нас будет меньше конкуренции.


Sergey13   (2005-11-22 12:57:00) [14]

2[5] msguns ©   (22.11.05 12:44)
>БД, содержащую отношения "один-ко-многим" в принципе можно назвать "иерархической".
Судя по сабжу, можно даже просто таблицу в которой предполагается некое упорядочивание (т.е. иерархия в некотором смысле).


msguns   (2005-11-22 12:44:00) [15]

Опять двадцать пять ! Вместо того, чтобы огласить "историю болезни", нам предлагают перечень инструментов, которыми делалась операция. И потом спрашивают "как спасти больного ?".
Где описание предметной области ? Где хотя бы концептуально схема решения (модель данных) ? Что значит "иерархическая база данных" ? Любую БД, содержащую отношения "один-ко-многим" в принципе можно назвать "иерархической".


ANB   (2005-11-22 12:15:00) [16]


> SmileCoder ©   (22.11.05 11:39)

Можно. Но нужно попрыгать :
1. Запоминаем PP строки, после которй должна идти вставка
2. Генерим PP новой строки
3. Выполняем update Таблица set PP = PP + 1 where PP >= PPновой строки.
4. Вставляем строку.

Все это жутко нехорошо.


sniknik   (2005-11-22 12:13:00) [17]

если сортировка все одно есть по полю то сделай его типа double(большое дробное), добавляй запись со значением  например автоинкремент * 10 (шаг сделать побольше), а вставляй (Insert) со значением среднего от тех записей между которыми надо вставить.
т.е. надо вставить между pp = 10 и 20 значит (10+20)/2 = 15, при сортированом по этому значению запись будет выглядеть именно вставленной...

тока не увлекайся "вставкой", а то в коне концов придеш к варианту когда снеднее стремиться к 0, или время от времени переинициализируй в таблице эти значения новым шагом только уже не от автоинкремента.


Sergey13   (2005-11-22 11:45:00) [18]

2SmileCoder ©   (22.11.05 11:39)
>Возможноли вообще реализовать вставку записи в любое место бд чтобы оно там четко остовалось а не сползало в конец списка?
Нет, нельзя. Разберись хотябы в терминологии.


Ega23   (2005-11-22 11:41:00) [19]

У тебя всегда Order By есть. И тебя, по-идее, не должно колыхать, каким образом физические данные лежат.


Наверх

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