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

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

TDBTreeView, перемещение элементов


DelphiLexx ©   (2006-11-16 18:09:00) 

Компонент TDBTreeView и его аналоги работают с БД как с деревом для этого таблица должна иметь следующий формат:
ID PARENT NAME

Как переместить элемент группы на одну позицию вверх\вниз и причем при следующей загрузке дерева оно должно быть построено с учетом этих изменений без введения в БД дополнительного поля.


RASkov   (2006-11-18 21:31:00) [1]

> [13] DelphiLexx ©   (17.11.06 12:51)

Временно отключаешь сортировку по дополнительному числовому полю, меняешь местами нужные значения этого поля, включаешь индекс по этому полю, я помоему так делал. непомню....
ЗЫ у меня 4 поля было и одно как раз для этого помоему.


clickmaker   (2006-11-17 17:45:00) [2]


> Есть еще один вариант - записывать скрупулезно карандашиком
> все изменения и при рестарте  OS (даже при destroy/create
> формы) - восстанавливать записанный порядок измененений.

Да-да. Это нужно отразить в юзер-мануале, а потом внести в список ежедневных обязанностей пользователя. Ибо нефик чаи гонять по полдня и колготки обсуждать всем отделом.


Jeer   (2006-11-17 17:41:00) [3]

clickmaker ©   (17.11.06 17:31) [17]

Принципиальный ответ был дан еще в [1] и [2].

Превратить виртуальные (ОЗУ/RAM) изменения в ([Р]ПЗУ/ROM) изменения.

Добавлением ли нового поля, выносом инфы в некий внешний файл, даже гибернация  - это все сброс "оперативки" в "постоянку".

Есть еще один вариант - записывать скрупулезно карандашиком все изменения и при рестарте  OS (даже при destroy/create формы) - восстанавливать записанный порядок измененений.

Вуаля !

Смеюсь ?
Да - конечно.


clickmaker   (2006-11-17 17:31:00) [4]


> Это плохой тон, более того неверный принцип, в общем случае

Ну человек не привык размусоливать. Ему сразу код нужен. Работа-то горит, начальство ногами топает, премия накрыться может.
А с чтением и осмыслением прочитанного траблы походу
Хотя в [4] уже был исчерпывающий ответ


Umnik   (2006-11-17 16:57:00) [5]

DelphiLexx ©   (16.11.06 18:09)  
После перемещения запрос на Update ?


Jeer   (2006-11-17 13:42:00) [6]


> DelphiLexx ©   (17.11.06 12:51) [13]
>
>
> > двигаем вверх/вниз - меняем юиды записей, двигаем между
> > ветками - меняем ссылки на предка. Я именно так и делал,
>
> >  всё без проблем работает.
>
> примерчик покажи
>


Это плохой тон, более того неверный принцип, в общем случае.


vovnuke   (2006-11-17 13:09:00) [7]

2 [10] Дмитрий Белькевич ©   (16.11.06 21:48)
а у вас былы внешние ссылки на эту таблицу? :-)


DelphiLexx   (2006-11-17 12:51:00) [8]


> двигаем вверх/вниз - меняем юиды записей, двигаем между
> ветками - меняем ссылки на предка. Я именно так и делал,
>  всё без проблем работает.

примерчик покажи


RASkov   (2006-11-16 23:33:00) [9]

Ну вообщем у меня 4 поля было. Вникать в свой код не стал, почему 4, ну да ладно. Код старый, может и я че не так делал.


RASkov   (2006-11-16 23:22:00) [10]

> [10] Дмитрий Белькевич ©   (16.11.06 21:48)

Хотя может так оно и есть.
Сейчас гляну как я делал в этом случае...


Дмитрий Белькевич   (2006-11-16 21:48:00) [11]

>Чел хочет запоминать порядок расположения записей в БД. Я так думаю. И хочет все ограничить тремя полями.

Без проблем - одно поле - uid, второе - данные, третье - указатель на предка, или какое-нить уникальное число - указатель на корень.

двигаем вверх/вниз - меняем юиды записей, двигаем между ветками - меняем ссылки на предка. Я именно так и делал, всё без проблем работает.


Jeer   (2006-11-16 19:21:00) [12]

Так пусть себе задаст вопрос - по каком полю он производит сортировку (выборку по сортировке)


RASkov   (2006-11-16 19:13:00) [13]

> Если у записи изменяется parent, то при следующем select
> из базы все должно быть выстроено на автомате.

При смене положения, как он описал в [3], ни PARENT ни ID не меняются.


RASkov   (2006-11-16 19:10:00) [14]

> [5] Jeer ©   (16.11.06 19:07)

Чел хочет запоминать порядок расположения записей в БД. Я так думаю. И хочет все ограничить тремя полями.


Jeer   (2006-11-16 19:10:00) [15]

извини - не понимаю.
Если у записи изменяется parent, то при следующем select из базы все должно быть выстроено на автомате.
Это если правильный DBTree.


Jeer   (2006-11-16 19:07:00) [16]


> все изменения соответственно вносятся в БД


Изменения чего ?


RASkov   (2006-11-16 18:58:00) [17]

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


DelphiLexx   (2006-11-16 18:58:00) [18]


> А - ну да.
> Есть еще вариант - не выключение, а гибернация Windows.
> Тогда - да, попадешь в тоже место.

Объясняю: Есть форма на которой расположен TDBTreeVew, который связан с TFIBDataSet'ом. Как перемещать элемент группы на одну позицию вверх или вниз, все изменения соответственно вносятся в БД. Структуры БД должна состоять из трех полей:
ID PARENT NAME
Пример было
Корень
 узел1
 узел2

После перемещения узла2 на одну позицию вверх должно стать.
Корень
 узел2
 узел1


Jeer   (2006-11-16 18:29:00) [19]

А - ну да.
Есть еще вариант - не выключение, а гибернация Windows.
Тогда - да, попадешь в тоже место.


Jeer   (2006-11-16 18:27:00) [20]

Ты сам точно понял, что сказал ?

Когда компьютер выключается, единственным местом, где могут храниться какие-либо данные, являются физические носители информации с ее сохранением без внешнего питания - HDD, FDD, Flash, EPROM.

Вводи дополнительные сведения в txt, реестр, ресурсы, etc - по выбору.


Наверх

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