Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка в список 
:(
    Опции темы
Ner-zul
Дата 13.11.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



 
  Добрый День,

  Я работаю с Delphi 6.  У меня такой вопрос. У меня есть список каких то объектов.  К примеру записей об оборудовании в этом проекте. Это список разделен на групыы. Его можно пролистывать и просматривать. Можно добавлять в конец новые записи. И разделы и в них опять новые записи. Реализация не древовидная.

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

Проблема тто в том. что у меня все эти записи хранятся в БД, под управлением Interbase7.1 И простой инсерт ставит новую запись всегда в конец, так что я не могу восстановить списка с нужным мне порядком. А порядок мне критичен.

Есть ли простой какой нибудь механизм вставки в середину таблицы ?
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
Rennigth
Дата 13.11.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Ner-zul, Заведи поле поле Order, и при выборке из базы сортируй по нему. При вставке нового объекта есть два варианта:
1.  Order у тебя типа float и при вставке нового выставляй ему order между значениями соседних елементов.
2. Полное перепроставление ордеров. (не есть гуд, но в некоторых ситуациях так нужно)


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
ama_kid
Дата 13.11.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 15
Всего: 95



не догнал проблемы...
Есть список. Хочешь вставить элемент - пройди во всем номерам после вставляемого в обратном порядке и передвинь вперед по одному. В итоге у тебя образуется свободное место куда можно вставить необходимый элемент...
Есть таблица. Если есть упорядоченный список - значит в этой таблице должно быть поле с уникальным возрастающим идентификатором. Делаешь UPDATE всем записям по полю идентификатора, увеличивая его на 1 и затем - INSERT с необходимым номером...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MacTep
Дата 13.11.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Интересно, почему ты пытаешься вообще вставить данные именно середину таблицы??? У тебя, наверняка, неправильная структура БД. И поэтому у тебя возникают такие трудности. В твоем случае, по-любому надо делать древовидную структуру таблицы. А то и проще поступать - делать несколько таблиц. Одну для группы, а другую для самого товара. В общем - нужно более подробное описание твоей проблемы.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Ner-zul
Дата 13.11.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



 Хммм.. со всеми согласен.

Я щас делаю сортирую по ID и соответсвенно сдвигаю все на 1 и вставляю свой.  тут две проблемы:
1) Через пол года эксплуатации это действие начнет требовать много машинного времени.
2) Неудобно идти строго в обратном порядке. А иначе недает инкрементировать значение Id, так как при первом же +1 , значение Id Текущей записи становится равным Id последующей и соответсвенно ошибка.

Придется вводить поле order. Но неприятен процесс прописывания везде отслеживания увеличения этого номера.
 Спасибо Rennigth за отличную идею с Дробными числами !!!

Насчет неправильной структуры. Я согласен. Не удачно. Но есть другие обстоятельства, которые не оставили мне выбора.
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
MacTep
Дата 14.11.2007, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



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


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.