![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Ner-zul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 24.1.2004 Где: Москва Репутация: нет Всего: нет |
Добрый День, Я работаю с Delphi 6. У меня такой вопрос. У меня есть список каких то объектов. К примеру записей об оборудовании в этом проекте. Это список разделен на групыы. Его можно пролистывать и просматривать. Можно добавлять в конец новые записи. И разделы и в них опять новые записи. Реализация не древовидная. Но я не понимаю как по простому можно реализовать вставку в середину списка. Чтобы ... опа... вспомнилось или появилось новое оборудование и мне надо его вставить где то в середину а не в конец. Я подвел курсор и вставил. Проблема тто в том. что у меня все эти записи хранятся в БД, под управлением Interbase7.1 И простой инсерт ставит новую запись всегда в конец, так что я не могу восстановить списка с нужным мне порядком. А порядок мне критичен. Есть ли простой какой нибудь механизм вставки в середину таблицы ? --------------------
Ner-zul |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Ner-zul, Заведи поле поле Order, и при выборке из базы сортируй по нему. При вставке нового объекта есть два варианта:
1. Order у тебя типа float и при вставке нового выставляй ему order между значениями соседних елементов. 2. Полное перепроставление ордеров. (не есть гуд, но в некоторых ситуациях так нужно) -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
не догнал проблемы...
Есть список. Хочешь вставить элемент - пройди во всем номерам после вставляемого в обратном порядке и передвинь вперед по одному. В итоге у тебя образуется свободное место куда можно вставить необходимый элемент... Есть таблица. Если есть упорядоченный список - значит в этой таблице должно быть поле с уникальным возрастающим идентификатором. Делаешь UPDATE всем записям по полю идентификатора, увеличивая его на 1 и затем - INSERT с необходимым номером... -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: 4 Всего: 4 |
Интересно, почему ты пытаешься вообще вставить данные именно середину таблицы??? У тебя, наверняка, неправильная структура БД. И поэтому у тебя возникают такие трудности. В твоем случае, по-любому надо делать древовидную структуру таблицы. А то и проще поступать - делать несколько таблиц. Одну для группы, а другую для самого товара. В общем - нужно более подробное описание твоей проблемы.
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| Ner-zul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 24.1.2004 Где: Москва Репутация: нет Всего: нет |
Хммм.. со всеми согласен.
Я щас делаю сортирую по ID и соответсвенно сдвигаю все на 1 и вставляю свой. тут две проблемы: 1) Через пол года эксплуатации это действие начнет требовать много машинного времени. 2) Неудобно идти строго в обратном порядке. А иначе недает инкрементировать значение Id, так как при первом же +1 , значение Id Текущей записи становится равным Id последующей и соответсвенно ошибка. Придется вводить поле order. Но неприятен процесс прописывания везде отслеживания увеличения этого номера. Спасибо Rennigth за отличную идею с Дробными числами !!! Насчет неправильной структуры. Я согласен. Не удачно. Но есть другие обстоятельства, которые не оставили мне выбора. --------------------
Ner-zul |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: 4 Всего: 4 |
Ну смотри, как скажешь. Хотя я думаю, что при правильно реализации структуры базы данных - любая проблема может быть решена.
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |