Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];

Вниз

Строки DB в TreeView   Найти похожие ветки 

 
Jeeb   (2007-02-06 18:44) [0]

Привет всем. Возник вопрос... но не знаю, как осуществить, помогите... плз...

Компоненты:
TreeView (Tree), DBGrid (DBTree), ADOConnection (FDM.ADOConn), ADOTable (FDM.TblTree), DataSource (FDM.SrcTree).

FDM.TblTree имеет поля "Наименование", "Уровень", "Надуровень", где

Наименование: key*, varchar, 50
Уровень: int, 10
Надуровень: key*, varchar, 50

* - составной ключ

Пример:

| Наименование   | Уровень | Надуровень  |
|----------------+---------+-------------|
| Кузов          | 0       |             |
| Бампер         | 1       | Кузов       |
| Крыло          | 1       | Кузов       |
| Лев. пер.      | 2       | Крыло       |
| Прав. пер.     | 2       | Крыло       |
| Лев. зад.      | 2       | Крыло       |
| Прав. зад.     | 2       | Крыло       |
| Трансмиссия    | 0       |             |
| Ступенчатая    | 1       | Трансмиссия |
| Автоматическая | 1       | Трансмиссия |
...

Из примера видно, что в поле "Надуровень" записываются значения,
которые при создании Tree будут являться выше на 1 уровень от
значений, которые записываются  поле "Наименование", а сам
уровень указывается в поле "Уровень". Нужно заметить, что
записи, имеющие уровень 0, надуровня не имеют.

Есть вероятность того, что кортежи (строки) таблицы не
упорядочены, т.е. в разнобой...

Необходимо:
1. Упорядочить FDM.TblTree по полю "Уровень" (не обязательно).
2. Добавить ветки "Наименование" в Tree, где уровень равен 0.
3. Добавить ветки "Наименование" в Tree, где уровень равен 1,
  зная что добавление будет происходить в ветку с именем
  "Надуровень", где уровень равен 0.
4. По аналогии с пунктом 3, только повышая уровень на один.

Должно получиться (исходя из примера):

+ Кузов
|-- Бампер
|-+ Крыло
| |-- Лев. пер.
| |-- Прав. пер.
| |-- Лев. зад.
| |-- Прав. зад.
+ Трансмиссия
|-- Ступенчатая
|-- Автоматическая

Ну вот, в прочем, и все....

Надеюсь на помощь...


 
Jeeb   (2007-02-06 18:47) [1]

procedure TFTree.BUpdateClick(Sender: TObject);
var
 I, L, MaxL, J, K, M, N: Integer;
 S, P, Q: String;
begin
 MaxL:=0;
 for I:=1 to Navigator.DataSource.DataSet.RecordCount do
   begin
     L:=Navigator.DataSource.DataSet.FieldByName("Óðîâå&#237 ;ü").AsInteger;
     if L>MaxL then
       MaxL:=L;
     Navigator.DataSource.DataSet.Next;
   end;
 L:=0;

 Navigator.DataSource.DataSet.First;
 for I:=1 to Navigator.DataSource.DataSet.RecordCount do
   begin
     L:=Navigator.DataSource.DataSet.FieldByName("Óðîâå&#237 ;ü").AsInteger;
     if L=0 then
       Tree.Items.Add(Tree.TopItem, Navigator.DataSource.DataSet.FieldByName("Íàèìåí&# 238;âàíèå").AsString);
     if L>0 then
       begin
         P:=Navigator.DataSource.DataSet.FieldByName("Íàèìå&#237 ;îâàíèå").AsString;
         M:=Navigator.DataSource.DataSet.RecNo;
         FDM.TblTree.Lookup("Íàäóðîâåíü ", P, "Íàèìåíîâàíèå");
         for K:=0 to Tree.Items.Count-1 do
           begin
             Tree.Select(Tree.Items.Item[K]);
             if Tree.Selected.Text=Navigator.DataSource.DataSet.FieldByName("Íàè& #236;åíîâàíèå").AsString then
               N:=K;
           end;
         Tree.Select(Tree.Items.Item[N]);
         Tree.Items.AddChild(Tree.Selected, Navigator.DataSource.DataSet.FieldByName("Íàèìåí&# 238;âàíèå").AsString);
       end;
     Navigator.DataSource.DataSet.Next;
   end;
end;


Думал так сделать... но увы... не получается...


 
Jeeb   (2007-02-06 18:51) [2]

пардон за букараги...

Уровень, Уровень, Наименование, Наименование, Надуровень, Наименование, Наименование, Наименование... это букараги по порядку...


 
Johnmen ©   (2007-02-06 19:29) [3]

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


 
MsGuns ©   (2007-02-06 22:44) [4]

Да.. и эта еще.. нафигатор на фиг !


 
Ega23 ©   (2007-02-07 08:26) [5]


> Да.. и эта еще.. нафигатор на фиг !


А строку делать ключевым полем - моветон.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.035 c
2-1175886508
Frozen
2007-04-06 23:08
2007.04.29
Выравнивание текста по щирине


15-1175416768
Kerk
2007-04-01 12:39
2007.04.29
Захват автозаправки


2-1175848426
Alex8
2007-04-06 12:33
2007.04.29
Модуль System


2-1176384536
ppcumax
2007-04-12 17:28
2007.04.29
Нужно написать чекер прокси


6-1162281007
progmax
2006-10-31 10:50
2007.04.29
сетевой диск фтп сервера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский