Главная страница
    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.048 c
2-1176209574
Mishenka
2007-04-10 16:52
2007.04.29
Имя компонента


3-1171031359
ANB
2007-02-09 17:29
2007.04.29
(Оракл) Как заставить вьюху слопать нужный мне тип ?


3-1171288160
Виталик 2007
2007-02-12 16:49
2007.04.29
Постейший пример работы с IB. Как правильно?


2-1175802409
jimmo
2007-04-05 23:46
2007.04.29
Структура базы данных для учета аппаратуры в ремонте


2-1175949500
Tru
2007-04-07 16:38
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский