Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2008, 20:55   #1
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию Access и Delphi

Подскажите, пожалуйста, как заполнить TreeView из базы.
имеется несколько таблиц
1. Predmets: idPr, name
2. Languages: idLG, name
3. Files: id, idPr, IdLG, filename, file
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Старый 08.01.2008, 22:49   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Если я правильно понял, то так:
1. Занесение в дерево всех записей из Predmets (простым перебором всех записей)
2. Занесение всех записей из Languages в качестве детей для каждой записи из Predmets (аналогично)
3. Занесение записей из Files в соответствии с idPr, IdLG. Для однозначной идентификации TreeNodes по idPr, IdLG при их создании нужно использовать метод TreeView.Items.AddObject, где указывать параметром объекта соответствующий идентификатор (idPr или IdLG).
mihali4 вне форума Ответить с цитированием
Старый 09.01.2008, 07:25   #3
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
Радость

mihali4 прав, но это ведь долго будет происходить, я предлагаю изменить структуру БД. объединить таблицы Predmets и Languages - структура у них одинакова. Только нужно будет добавить третье поле - тип (новая таблица в которой будет два значения Predmets и Languages). а потом рекурсивно перебирать каждый элемент таблицы (объединенной).

вот примерная под программа обхода строк таблицы

Код:
procedure fTreeFill(ParentNode : TTreeNode; ParentKey : Integer);
var
  ArrId : Array of Integer;
  ArrName : Array of String;
  ArrENIR : Array of String;
  i : Integer;
  PNode : TTreeNode;
  vetkadata:pnoder;
//  keyData:Array of Integer;
begin
  with Form1.QuFill do
    begin
      active := false;
      SQL.Clear;
      SQL.Add('select * from gruppa where ParentKey='+IntToStr(ParentKey));
      active := true;
      SetLength(ArrId, RecordCount);
      SetLength(ArrName, RecordCount);
      SetLength(ArrENIR, RecordCount);
//      SetLength(keyData, RecordCount);
      i := 0;
      while not EOF do
        begin
          ArrId[i] := FieldByName('KeyId').AsInteger;
          ArrName[i] := FieldByName('NameID').AsString;
          ArrENIR[i] := FieldByName('ENIR').AsString;
//          keyData[i] := FieldByName('KeyId').AsInteger;
          Inc(i);
          Next;
        end;
      Close;
    end;
  for i:=0 to Length(ArrId)-1 do
    begin
      form1.TreeView1.Items.BeginUpdate;
      PNode := Form1.TreeView1.Items.AddChild(ParentNode, Arrenir[i]+'   '+ArrName[i]);
      vetkadata:=new(pnoder);
      vetkadata.val:=0;
      vetkadata.tiprab := 0;
      PNode.Data:=vetkadata;
      pnoder(PNode.Data).tiprab :=  ArrId[i];
      pnoder(PNode.Data).val := ArrId[i];
      if pnode.Level <> 0 then
      begin
            pnode.ImageIndex := 2;
            pnode.SelectedIndex := 2;
//            pnode.StateIndex := 5;
      end;
      fTreeFill(PNode,ArrId[i]);
      form1.TreeView1.Items.EndUpdate;
    end;
    form1.StatusBar.Panels.Items[0].Text:='Элементов в дереве: '+inttostr(form1.TreeView1.Items.Count);
    //form1.TreeView1.FullExpand;
    //form1.TreeView1.AlphaSort(true);
ArrId := nil;
ArrName := nil;
ArrENIR := nil;
end;
так гораздо лучше т.к. в данном случае аналитика не очень различается
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…

Последний раз редактировалось Alex21; 09.01.2008 в 07:37. Причина: Код заключаем в специальные теги CODE
Paul Hindenburg вне форума Ответить с цитированием
Старый 09.01.2008, 12:08   #4
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

Можно тогда показать структуру таблицы.А то я чегото непонял.
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Старый 10.01.2008, 20:12   #5
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
По умолчанию конечно можно

Цитата:
Сообщение от Mitron Посмотреть сообщение
Можно тогда показать структуру таблицы.А то я чегото непонял.
поля таблицы:
PrimaryKey - int - это первичный кюч таблицы
KeyKind - int - а это ссылка на родителя , т.е. на PrimaryKey
NameText varchar - непосредственно

я тут чето архив добавить не могу))))
на мыло могу сбросить, либо объясни как добавить)))
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 10.01.2008, 20:19   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да зачем тут архив?
Три поля:
- код ветки (автоинкремент, первичный ключ)
- код родителя (0, если в корне) (тоже включить в первичный ключ)
- текст ветки

Последний раз редактировалось mihali4; 10.01.2008 в 20:22.
mihali4 вне форума Ответить с цитированием
Старый 10.01.2008, 20:25   #7
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Да зачем тут архив?
Три поля:
- код родителя (0, если в корне) (автоинкремент, первичный ключ)
- код ветки (тоже включить в первичный ключ)
- текст ветки
я хотел готовый проект по теме дать - я с этим TTreeView - оч хорошо поработал)))
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi & Access & Ole vodila БД в Delphi 0 15.07.2008 11:11
delphi+access Doget БД в Delphi 2 30.06.2008 20:18
Delphi & Access LIEN Помощь студентам 1 26.04.2008 14:37
Access Delphi Yana БД в Delphi 1 04.01.2008 21:54
Delphi+ADO+Access Turpa Помощь студентам 12 15.10.2007 23:29