Форум: "Базы";
Текущий архив: 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