Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

Отображение базы данных в TreeView. Приведенный пример ...   Найти похожие ветки 

 
uka ©   (2007-02-04 09:58) [0]

Отображение базы данных в 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-04 10:24) [1]

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

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;


 
atruhin ©   (2007-02-04 22:31) [2]

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


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


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

Ты удивлён?

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


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

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


 
uka ©   (2007-02-05 19:39) [5]

Благодарю за советы. С этим разобрался.  У меня возник другой вопрос.
Вот таблица:
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. При выделении какой-то ветви нужно, чтобы загружался свой файл соответсвующий этой ветви. Подскажите, как организовать сие?
Заранее благодарен.


 
uka ©   (2007-02-05 19:39) [6]

Благодарю за советы. С этим разобрался.  У меня возник другой вопрос.
Вот таблица:
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. Подскажите, как организовать сие?
Заранее благодарен.


 
MsGuns ©   (2007-02-05 22:55) [7]

type

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


 
uka ©   (2007-02-06 07:24) [8]

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

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;


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

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


 
uka ©   (2007-02-06 20:21) [10]


> 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;


 
MsGuns ©   (2007-02-06 22:35) [11]

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

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


 
Johnmen ©   (2007-02-06 23:07) [12]


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

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


 
uka ©   (2007-02-07 07:46) [13]


> 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;

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


 
MsGuns ©   (2007-02-07 15:40) [14]

>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;


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

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


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


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

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


 
uka ©   (2007-02-07 16:57) [17]


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

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



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

Текущий архив: 2007.04.29;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.061 c
2-1175928885
-=Tiger=-
2007-04-07 10:54
2007.04.29
Подскажите ссылку на компонент...


8-1155648360
Deka
2006-08-15 17:26
2007.04.29
Подскажите по DSPack. Разбираться нет времени - проект горит.


15-1175535198
Nic (ro)
2007-04-02 21:33
2007.04.29
Как сделать меню как в IE 6.0?


1-1173171684
tytus
2007-03-06 12:01
2007.04.29
Как узнать высоту заголовка окна?


2-1175946952
kilonet
2007-04-07 15:55
2007.04.29
Отладка