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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2008, 18:48   #1
VenMaster
Пользователь
 
Регистрация: 24.04.2008
Сообщений: 53
Восклицание Опять Treeview / help срочно плз

Имеется таблица в Access со след. полями ID,Tema,Razdel,Name,Path
КОД:
procedure TForm1.Button1Click(Sender: TObject);
var
kol1,kol2,kol3,i,j,n:integer;
Nod,Nod1:TTreeNode;
st1,st2,st3:string;
begin
TreeView1.Items.Clear;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select distinct Tema from Table order by Tema';
ADOQuery1.Open;

kol1:=ADOQuery1.RecordCount;
ADOQuery1.first;
for n:=1 to kol1 do
begin
st1:=trim(ADOQuery1.FieldValues['Tema']);
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:='select distinct Razdel from Table where Tema = '''+st1+''' order by Razdel';
ADOQuery2.Open;
kol2:=ADOQuery2.RecordCount;
ADOQuery2.First;
Nod:=TreeView1.Items.Add(nil,st1);
for i:=1 to kol2 do
begin
st2:=trim(ADOQuery2.FieldValues['Razdel']);
nod1:=TreeView1.Items.AddChild(nod, st2);
//nod1.ImageIndex:=1;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Text:='select Name from Table where Tema = '''+st1+''' and Razdel = '''+st2+''' order by Name';
ADOQuery3.Open;
kol3:=ADOQuery3.RecordCount;
for j:=1 to kol3 do
begin
st3:=trimright(ADOQuery3.FieldValue s['Name']);
TreeView1.Items.AddChild(nod1,st3);
ADOQuery3.Next;
end;
ADOQuery2.Next;
end;
ADOQuery1.Next;
end;

end;


Этот код строит дерево след. вида: Тема->Раздел->Название. В поле Path прописывается путь к файлу который при двойном щелчке по Названию должен открываться предположим в WebBrowser'е. Много чего пробывал но чет не выходит. Помогите (если это конечно возможно).
Пробовал поле Path задавать тип OLE, во с этим у меня вообще ниче не выходит.
Принимается любая помощь. ЗАРАНИЕ СПС
VenMaster вне форума Ответить с цитированием
Старый 24.05.2008, 19:21   #2
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
Стрелка

Добавь еще одну переменную типа TTreeNode, а также указатель на тип string

Код:
var 
   nod3 : TTreeNode
   Path    : ^string
Место:
Код:
for j:=1 to kol3 do
  begin
    st3:=trimright(ADOQuery3.FieldValues['Name']);
    TreeView1.Items.AddChild(nod1,st3);
    ADOQuery3.Next;
 end;
Замени на такое:
Код:
for j:=1 to kol3 do
  begin
    st3:=trimright(ADOQuery3.FieldValues['Name']);
    nod3:=TreeView1.Items.AddChild(nod1,st3);
    Path^:=adoQuery3.FieldValues['Path']);
    nod3.data:=path; 
{У класса  TTreenode есть свойство Data, которое может хранить данные типа Pointer. 
Заганяем туда строку, а затем при двойном щелчке считываем. :) }
   ADOQuery3.Next;
end;
Также добавь обработчик события OnDblClick:

Код:
procedure TForm1.TreeView1DblClick(Sender: TObject);
var url : string;
begin
if treeView1.SelectionCount=1 then //если выделено больше чем один ноде
 begin
 url:= String(treeView1.Selected.data^) ; //читаем путь к файлу из свойства data
   webbrowser1.Navigate(url); //тут все ясно
 end;
end;
The Revolution is Now!

Последний раз редактировалось hoza_syl; 24.05.2008 в 19:24.
hoza_syl вне форума Ответить с цитированием
Старый 24.05.2008, 23:05   #3
VenMaster
Пользователь
 
Регистрация: 24.04.2008
Сообщений: 53
По умолчанию

В этой части выдает ошибку что, типа поле Path не найдено????for j:=1 to kol3 do
begin
st3:=trimright(ADOQuery3.FieldValue s['Name']);
nod3:=TreeView1.Items.AddChild(nod1 ,st3);
Path^:=adoQuery3.FieldValues['Path']);
nod3.data:=path;
{У класса TTreenode есть свойство Data, которое может хранить данные типа Pointer.
Заганяем туда строку, а затем при двойном щелчке считываем. }
ADOQuery3.Next;
end;
VenMaster вне форума Ответить с цитированием
Старый 25.05.2008, 17:45   #4
VenMaster
Пользователь
 
Регистрация: 24.04.2008
Сообщений: 53
По умолчанию

Народ выручайте плз
VenMaster вне форума Ответить с цитированием
Старый 26.05.2008, 09:36   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если поле не найдено в таблице значит его там нет или ты не верно его название написал
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2008, 13:24   #6
VenMaster
Пользователь
 
Регистрация: 24.04.2008
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если поле не найдено в таблице значит его там нет или ты не верно его название написал
не, он его не находит т.к. оно в запросе не описано
ADOQuery3.SQL.Text:='select Name from Table where Tema = '''+st1+''' and Razdel = '''+st2+''' order by Name';
а когда я его в этот запрос добавляю или создаю еще один цикл, добавив ADOQury4 выдает вообще какуюто ошибку типа Access.....итам всякие цифры...
VenMaster вне форума Ответить с цитированием
Старый 26.09.2008, 22:09   #7
Snegovik
Пользователь
 
Регистрация: 26.09.2008
Сообщений: 16
По умолчанию

VenMaster прошу прощения, что не по теме спрашиваю, я пытаюсь разобраться в сущности работы TreeView с БД, я новичек в этой "теме".
У меня вопрос: я создал базу в Access по типу вашего, затем на форме батончику дал аналогичный вашему код (+ на форме ADOQuery 3 шт. и т.п.).
Компилирую - все нормально. Жму на батон - выскакивает: "ошибка синтаксиса в предложении FROM".
Если вас не затруднит, поясните где я ошибся? Уж очень хочется разобраться в работе связки TreeView и БД!
Snegovik вне форума Ответить с цитированием
Старый 27.09.2008, 14:31   #8
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Snegovik у тебя неверный SQL запрос(Тойсть ошибка в свойстве SQL компонента TADOQUERY). Выклади его, и мы посмотрим где ошибка.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 27.09.2008, 15:16   #9
Snegovik
Пользователь
 
Регистрация: 26.09.2008
Сообщений: 16
По умолчанию

Да собственно, в свойство ADOQuery# я те же запросы и прописал, что в коде
Snegovik вне форума Ответить с цитированием
Старый 27.09.2008, 15:45   #10
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Ну может у тебя таких полей в таблице нету, как в запросе. Выложы все, я посмотрю
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И опять мэйлы.. Опять... Pusher PHP 6 28.06.2008 03:08
Опять автозагрузка RealSHELS Общие вопросы Delphi 7 16.06.2008 01:32
Опять TreeView Simply-Art Компоненты Delphi 2 20.07.2007 17:14
Опять graph nikleb Паскаль, Turbo Pascal, PascalABC.NET 6 16.04.2007 22:58