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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2012, 10:49   #1
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
По умолчанию как сделать чтоб по клику в TreeView в DBGrid

Здравствуйте.
подскажите сделать чтоб по нажатию на каждую категорию в трее открывать таблицу в DBGrid.
пока делаю так
Код:
procedure TForm1.TreeClick(Sender: TObject);
begin
  Query.Active:=false;
  Query.SQL.Clear;
  Query.SQL.Add('select * from goods where cate_name ='+ tree.Selected.text );
  Query.Active:=true;
end;
но в базе есть поля с запятыми, например
Цитата:
Электроника, фото, связь
и соответственно выдается ошибка синтаксиса (запятая) в выражении запроса.
Поля в таблице goods в базе access: 'cate_id', 'parent_id', 'cate_name'
Для спасибо весы слева
yaskin вне форума Ответить с цитированием
Старый 04.05.2012, 11:13   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Хорошо, а проблема то в чем? "Есть поля с запятыми". Это как? И чем они мешают?

К тому же, как минимум, надо строковое значение заключать в кавычки:
Код:
Query.SQL.Add('select * from goods where cate_name ='+ QuotedStr(tree.Selected.text));
---
Обрабатывать отображение в гриде надо по событию OnChange в TreeView. Потому как OnClick реагирует только на клик мыши и данные в гриде не будут меняться при движениях по дереву через клавиатуру.

Последний раз редактировалось Прик; 04.05.2012 в 11:16.
Прик вне форума Ответить с цитированием
Старый 04.05.2012, 16:46   #3
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
По умолчанию

Спасибо. Ошибка исчезла.
Может наглею, но подскажите еще такой вопрос.
Есть процедура заполнения TreeView. нашел в интернете
Код:
procedure FillTree(Tree: TTreeView; Query: TDataSet; idNode, idParent,
  cNodeName: string);
var
  i: integer;
begin
  // Корневой узел, должен быть первым в выборке Query
  Query.First;
  Tree.Items.Clear;
  Tree.Items.AddObject(nil, Query.FieldByName(cNodeName).AsString,
    Pointer(Query.FieldByName(idNode).asInteger));
  Query.Next;
  while not Query.Eof do
  begin
    i := 0;
    while i < Tree.Items.Count do
      if Tree.Items.Item[i].Data = Pointer(Query.FieldByName(idParent).asInteger)
        then
      begin
        Tree.Items.AddChildObject(Tree.Items.Item[i],
          Query.FieldByName(cNodeName).AsString,
          Pointer(Query.FieldByName(idNode).asInteger));
        break;
      end
      else
        Inc(i);
    Query.Next;
  end;
end;
Вот я заполняю treeview
Код:
procedure TForm1.Button4Click(Sender: TObject);
begin
Query.Active:= True;
  FillTree(Tree, Query, 'cate_id', 'parent_id', 'cate_name');
end;
залились в TreeView категории cate_name, а как получить cate_id оттуда. подозреваю что можно как-то через параметры, но не знаю как. не подскажете.
заранее спасибо
Для спасибо весы слева
yaskin вне форума Ответить с цитированием
Старый 04.05.2012, 16:53   #4
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Что значит как поучить? куда получить?
=master= вне форума Ответить с цитированием
Старый 04.05.2012, 17:21   #5
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
По умолчанию

в treeview название категории можно получить из tree.Selected.text, а как получить cate_id оттуда
Для спасибо весы слева
yaskin вне форума Ответить с цитированием
Старый 04.05.2012, 17:54   #6
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Вы его куда сохраняете? Оттуда и взять надо.
=master= вне форума Ответить с цитированием
Старый 05.05.2012, 14:24   #7
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
По умолчанию

Цитата:
Сообщение от =master= Посмотреть сообщение
Вы его куда сохраняете? Оттуда и взять надо.
очень умно. понятно что оттуда. вопрос как?
Для спасибо весы слева
yaskin вне форума Ответить с цитированием
Старый 05.05.2012, 19:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

вот так:
Код:
...:=Integer(TreeView1.Selected.Data);
Учитывая что речь идет о выбранной ветке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2012, 10:42   #9
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
вот так:
Код:
...:=Integer(TreeView1.Selected.Data);
Учитывая что речь идет о выбранной ветке.
Сделал так
Код:
  Query.SQL.Add('select * from goods where cate_id = '+InttoStr(Integer(Tree.Selected.Data)));
заработало.
Спасибо
Для спасибо весы слева
yaskin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтоб заокруглить число??? yura_zb Общие вопросы C/C++ 3 13.04.2011 16:40
Как сделать чтоб listbox показывал нумерацию? blackstersl Общие вопросы Delphi 7 01.02.2009 14:28
Как сделать, чтоб в ячейке ВЫБИРАЛОСЬ? kristinafadeewa Microsoft Office Excel 12 27.10.2008 06:05
как сделать чтоб экселев. файл висел открытым на рабочем столе как афиша на заборе? Мара Помощь студентам 6 24.07.2008 13:29
Как сделать чтоб картинки менялись? Kaktys v tymane Помощь студентам 1 09.05.2008 00:53