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

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

Отображение базы данных в TreeView. Приведенный пример ... [D7, Access]


uka ©   (2007-02-04 09:58:00) 

Отображение базы данных в TreeView. Приведенный пример отображает загрузку данных. Проблемма в том, что не получается правильно сохранить идентификатор строки в таблице БД, с которой связан текущий элемент дерева.

procedure TForm1.FormShow(Sender: TObject);
var
 tNew: TTreeNode;
 idItem, i: integer;
begin
   TreeView1.Items.Clear;
   datamodule2.docTable1.Active:= true;

   datamodule2.docTable1.First;
   while datamodule2.docTable1.Eof<>true do
     begin
         tNew:=nil;
         If datamodule2.docTable1.Fields[2].AsInteger>0 then
           for i:= 0 to TreeView1.Items.Count-1 do
             If idItem=datamodule2.docTable1.Fields[2].AsInteger then
                 tNew:=TreeView1.Items[i];
          with TreeView1.Items.AddChild(tNew,datamodule2.docTable1.Fields[1].AsString) do
           begin
               {Data:=idItem;}
               idItem:=datamodule2.docTable1.Fields[0].AsInteger;
           end;
      datamodule2.docTable1.Next;
     end;

end;


uka   (2007-02-07 16:57:00) [1]


> Johnmen ©   (07.02.07 16:33) [16]
>
> > uka ©   (07.02.07 07:46) [13]
> > Благодарю за ссылку,  но она не рабочая.
>
> Ссылка рабочая и всегда рабочей была.
> Впрочем, появилась мыслишка, что тебе пофигу и эта ссылка
> и все другие. Ты хочешь свой велик сделать с треугольными
> колёсиками...:)))

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


Johnmen   (2007-02-07 16:33:00) [2]


> uka ©   (07.02.07 07:46) [13]
> Благодарю за ссылку,  но она не рабочая.

Ссылка рабочая и всегда рабочей была.
Впрочем, появилась мыслишка, что тебе пофигу и эта ссылка и все другие. Ты хочешь свой велик сделать с треугольными колёсиками...:)))


MsGuns   (2007-02-07 15:42:00) [3]

Внизу добавить еще один end ;)


MsGuns   (2007-02-07 15:40:00) [4]

>procedure TForm1.TreeView1DblClick(Sender: TObject);
var
  i: integer;
  idItem: PItemData;
begin
  label1.Caption:=TreeView1.Selected.Text;
  iditem := PItemData(TreeView1.Selected.Data);
  with datamodule2.ADOQuery1 do
    begin
      if Active then Close;
      SQL.Clear;
      SQL.Text := 'select path from doc where path like '+
         QuotedStr('%'+TreeView1.Selected.Text+'%');
     try
       Open;
       iditem.FPath := Fields[0].AsString;
       WebBrowser1.Navigate(idItem.FPath);
    except
    end;
end;


uka   (2007-02-07 07:46:00) [5]


> Johnmen ©   (06.02.07 23:07) [12]
>
> > uka ©   (06.02.07 20:21) [10]
>
> Ок. Вот скачай себе исходники TDBTreeView http://kokonat.
> narod.ru/download/down.htm
> всё очень прозрачно и понятно написано. При грамотной доработке
> получается весьма неплохой компонент.

Благодарю за ссылку,  но она не рабочая.
Вот немного исправленный код:
procedure TForm1.TreeView1DblClick(Sender: TObject);
var i: integer;
   idItem: PItemData;
   s: String;
begin

     s:='%'+TreeView1.Selected.Text+'%';
     label1.Caption:=TreeView1.Selected.Text;
     datamodule2.ADOQuery1.Active:=False;
     datamodule2.ADOQuery1.SQL.Add('select path from doc');
     datamodule2.ADOQuery1.SQL.Add('where path like s');
     datamodule2.ADOQuery1.Active:=True;
     idItem.FPath:=datamodule2.ADOQuery1.SQL.Text;

 WebBrowser1.Navigate(idItem.FPath);
end;

Подскажите, как правильно извлечь из запроса значение.


Johnmen   (2007-02-06 23:07:00) [6]


> uka ©   (06.02.07 20:21) [10]

Ок. Вот скачай себе исходники TDBTreeView http://kokonat.narod.ru/download/down.htm
всё очень прозрачно и понятно написано. При грамотной доработке получается весьма неплохой компонент.


MsGuns   (2007-02-06 22:35:00) [7]

>uka ©   (06.02.07 20:21) [10]

Замечательно !
А где открытие запроса ?


uka   (2007-02-06 20:21:00) [8]


> Johnmen ©   (06.02.07 13:13) [9]
> Читать по полного просветления
> http://delphikingdom.ru/asp/viewitem.asp?catalogid=488

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

procedure TForm1.TreeView1DblClick(Sender: TObject);
var i: integer;
   idItem: PItemData;
begin
  If TreeView1.Selected<>nil then
    begin
     i:=Integer(TreeView1.Selected.data);
     datamodule2.ADOQuery1.Active:=False;
     datamodule2.ADOQuery1.SQL.Add('select key, path from doc');
     datamodule2.ADOQuery1.SQL.Add('where');
     datamodule2.ADOQuery1.SQL.Add('(key="'+IntToStr(i)+'")');
     idItem.FPath:=datamodule2.ADOQuery1.Fields[3].AsString;
    end;
 WebBrowser1.Navigate(idItem.FPath);
end;


Johnmen   (2007-02-06 13:13:00) [9]

Читать по полного просветления
http://delphikingdom.ru/asp/viewitem.asp?catalogid=488


uka   (2007-02-06 07:24:00) [10]

Я знаю выделенную ветвь, а как сравнить это значение с тем, что в таблице и выбрать соответствующий файл?
Мой код преобразует прогу в проводник винды:

procedure TForm1.TreeView1Click(Sender: TObject);
var s:string;
   idItem: PItemData;
begin
  if TreeView1.Selected.Index=datamodule2.docTable1.Fields[0].AsInteger then
    idItem.FPath:=datamodule2.docTable1.Fields[3].Text;
  WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)+idItem.FPath);
end;


MsGuns   (2007-02-05 22:55:00) [11]

type

 PItemData=record
     Index: integer;
      FPath: TFileName;
 end;


uka   (2007-02-05 19:39:00) [12]

Благодарю за советы. С этим разобрался.  У меня возник другой вопрос.
Вот таблица:
Key                 chapter                  idParent                   path
1                     Глава1                    0                         Data\1.htm
2                     Глава2                      1                           Data\2.htm
3                     Глава3                      1                          Data\3.htm
4                     Глава4                       1                         Data\4.htm
...                     ...                         ...                           ...

В ветви дерева заносятся значения поля chapter. При выделении какой-то ветви нужно, чтобы загружался свой файл соответсвующий этой ветви из поля path. Подскажите, как организовать сие?
Заранее благодарен.


uka   (2007-02-05 19:39:00) [13]

Благодарю за советы. С этим разобрался.  У меня возник другой вопрос.
Вот таблица:
Key                 chapter                  idParent                   path
1                     Глава1                    0                         Data\1.htm
2                     Глава2                      1                           Data\2.htm
3                     Глава3                      1                          Data\3.htm
4                     Глава4                       1                         Data\4.htm
...                     ...                         ...                           ...

В ветви дерева заносятся значения поля chapter. При выделении какой-то ветви нужно, чтобы загружался свой файл соответсвующий этой ветви. Подскажите, как организовать сие?
Заранее благодарен.


Gin2   (2007-02-05 14:49:00) [14]

на delphikingdom есть классные примеры в хелоуверд


Johnmen   (2007-02-04 23:00:00) [15]


> idItem:=new(PItemData);//здесь выдается ошибка о несоответсвии
> типов PItemData and pointer

Ты удивлён?

Лучше почитай AddChildObject. И не забывай чистить за собой.


atruhin   (2007-02-04 22:31:00) [16]

ID записи обычно помещают в Tag.
with TreeView1.Items.AddChild(tNew,datamodule2.docTable1.Fields[1].AsString)
 do Tag := datamodule2.docTable1.Fields[0].AsInteger;


uka   (2007-02-04 10:24:00) [17]

Вот немного исправленный код:

type

  PItemData=record
      Index: integer;
      end;
....
procedure TForm1.FormShow(Sender: TObject);
var
 tNew: TTreeNode;
 idItem: PItemData;
 i: integer;
begin
   TreeView1.Items.Clear;
   datamodule2.docTable1.Active:= true;

   datamodule2.docTable1.First;
   while datamodule2.docTable1.Eof<>true do
     begin
         tNew:=nil;
         If datamodule2.docTable1.Fields[2].AsInteger>0 then
           for i:= 0 to TreeView1.Items.Count-1 do
             If PItemData(TreeView1.Items[i].Data).Index=datamodule2.docTable1.Fields[2].AsInteg er then
                 tNew:=TreeView1.Items[i];
          with TreeView1.Items.AddChild(tNew,datamodule2.docTable1.Fields[1].AsString) do
           begin
               idItem:=new(PItemData);//здесь выдается ошибка о несоответсвии типов PItemData and pointer
               Data:=idItem;
               idItem.Index:=datamodule2.docTable1.Fields[0].AsInteger;
           end;
      datamodule2.docTable1.Next;
     end;

end;


Наверх

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