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

Вниз

Отображение базы данных в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.055 c
2-1176308117
ppcumax
2007-04-11 20:15
2007.04.29
Как заменить пробелы на перенос строки?


15-1175503029
X9
2007-04-02 12:37
2007.04.29
Ну наконец-то...


10-1131953746
john_mag
2005-11-14 10:35
2007.04.29
Bookmarks


2-1175983376
Василий Кузнецов
2007-04-08 02:02
2007.04.29
.html


2-1176292688
Priest
2007-04-11 15:58
2007.04.29
Как проверить наличие поддерева в XML





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский