Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 07.02.2011, 19:00   #1
WhiteDemon
 
Аватар для WhiteDemon
 
Регистрация: 07.02.2011
Адрес: Россия
Сообщений: 9
Репутация: 10
По умолчанию Выборка в DBGrid по выбору узла в TreeView

Здравствуйте!
У меня на форме есть TreeView и DBGrid. В TreeView загружаются данные из двух таблиц MS SQL: отделы (id_o, otdel_name) и сотрудники (id_s,fio,id_o). В DBGrid отображены данные таблицы оборудование (id_o, name, id_o).
Мне бы хотелось сделать следующее: при выборе в TreeView отдела в DBGrid отображалось оборудование, которое в данном отделе.(задачка-то вроде простая,но...)
Если кто знает как это реализовать, плиз подскажите.
WhiteDemon вне форума   Ответить с цитированием
Старый 07.02.2011, 22:14   #2
asmodey1
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 808
Репутация: 308
По умолчанию

Привяжите к каждой ноде объект (свойство Data у TTreeNode), а в нем укажите ссылку на таблицу оборудования. В хэлпе есть подробный пример, как это делается.
Тогда "при выборе в TreeView отдела" будете делать Locate() на нужную запись таблицы оборудования.
asmodey1 вне форума   Ответить с цитированием
Старый 10.02.2011, 19:09   #3
WhiteDemon
 
Аватар для WhiteDemon
 
Регистрация: 07.02.2011
Адрес: Россия
Сообщений: 9
Репутация: 10
По умолчанию

Спасибо за идею как-нибудь разберусь, а сейчас пока делаю уже другое
WhiteDemon вне форума   Ответить с цитированием
Старый 15.02.2011, 21:09   #4
WhiteDemon
 
Аватар для WhiteDemon
 
Регистрация: 07.02.2011
Адрес: Россия
Сообщений: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от asmodey1 Посмотреть сообщение
Привяжите к каждой ноде объект (свойство Data у TTreeNode), а в нем укажите ссылку на таблицу оборудования. В хэлпе есть подробный пример, как это делается.
Я честно попыталась понять пример из хелпа, но увы видимо моих знаний пока не достаточно для этого Если Вам не трудно, объясните пожалуйста как же сделать енто.
WhiteDemon вне форума   Ответить с цитированием
Старый 16.02.2011, 00:11   #5
asmodey1
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 808
Репутация: 308
По умолчанию

Чего ж там непонятного-то ?
Берем и один в один перерисовываем оттуда кусок для вашей процедуры загрузки базы в дерево. Примерно так :
Код:
procedure TFmain.GetTree;
var nnod,nnor: TTreeNode;//nnor - для подузлов
     MyRecPtr: PMyRec;//описывается точно так, как в примере
begin
TreeView.Items.BeginUpdate;
TreeView.SortType:=stNone;
TreeView.Items.Clear;
TOtdTable.First;
if TOtdTable.RecordCount>0 then
begin
while not TOtdTable.Eof do
begin
New(MyRecPtr);//создаем новый экземпляр объекта
MyRecPtr^.OtdId:=TOtdTable.FieldByName('Id_otd').Value;//задаем параметр OtdId объекта
nnod:=TreeView.Items.AddObject(nil, TOtdTable.FieldByName('Otdel_name').Text, MyRecPtr);//добавляем ноду с объектом
...
//и так далее
Потом, при выборе отдела в TreeView, будете делать :
Код:
TOborTable.Filter:='Id_otd='+QuotedStr(PMyRec(TreeView.Selected.Data)^.OtdId);//это таблица оборудования, привязанная к DBGrid
Ну, а объявляем точь-в-точь, как в примере:
Код:
type
PMyRec = ^TMyRec;
TMyRec = record
  OtdId: longint;
end;

var
  Fmain: TFmain;
...

Последний раз редактировалось asmodey1; 16.02.2011 в 00:33.
asmodey1 вне форума   Ответить с цитированием
Старый 16.02.2011, 14:08   #6
WhiteDemon
 
Аватар для WhiteDemon
 
Регистрация: 07.02.2011
Адрес: Россия
Сообщений: 9
Репутация: 10
По умолчанию

Сделала как посоветовали,но
Код:
ADOQueryMain.Filter:='otdel='+QuotedStr(PMyRec(TVOtdelSotrud.Selected.Data)^.OtdId);//это таблица оборудования, привязанная к DBGrid
не работает, ругается "Incompatible types: 'string' and 'Integer' ", ошибка поятна (ADOQueryMain.Filter должно быть string, а QuotedStr(PMyRec(TVOtdelSotrud.Sele cted.Data)^.OtdId) у меня integer) initostr не помогает.

Сделала вот так
Код:
 ADOQueryMain.Locate('otdel',(PMyRec(TVOtdelSotrud.Selected.Data)^.OtdId),[]);
но в таком случае при выборе отдела просто переходит к первой записи с таким отделом, а хотелось бы все же получить в DBGrid выборку всех устройств в отделе.
WhiteDemon вне форума   Ответить с цитированием
Старый 16.02.2011, 17:01   #7
asmodey1
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 808
Репутация: 308
По умолчанию

Цитата:
Сообщение от WhiteDemon Посмотреть сообщение
initostr не помогает
Враки. Не верю.
Код:
ADOQueryMain.Filter:='otdel='+IntToStr(PMyRec(TVOtdelSotrud.Selected.Data)^.OtdId);
работает.
asmodey1 вне форума   Ответить с цитированием
Старый 16.02.2011, 18:07   #8
WhiteDemon
 
Аватар для WhiteDemon
 
Регистрация: 07.02.2011
Адрес: Россия
Сообщений: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от WhiteDemon Посмотреть сообщение
initostr не помогает.
пардон, это я не правильно выразилась. IntToStr действительно помогает исправить эту ошибку, но при этом выборка не происходит, вообще ничего не происходит
WhiteDemon вне форума   Ответить с цитированием
Старый 16.02.2011, 22:35   #9
asmodey1
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 808
Репутация: 308
По умолчанию

А заменить названия полей на те, которые у вас в таблицах, в голову не приходило ?
Или вы так и оперируете теми именами, которые я привел условно ?
Тогда естественно, что выборки не будет...
asmodey1 вне форума   Ответить с цитированием
Старый 17.02.2011, 15:12   #10
WhiteDemon
 
Аватар для WhiteDemon
 
Регистрация: 07.02.2011
Адрес: Россия
Сообщений: 9
Репутация: 10
По умолчанию

Да не, названия полей из моих таблиц. (я думаю что при попытке выделить узел delphi бы ругнулся, если бы были не те поля)

Вот мой код заполнения TreeView
Код:
procedure TFormMain.FormActivate(Sender: TObject);
var otdel_node, sotrudnik_node:TTreeNode;
    field:string;
    MyRecPtr: PMyRec;
begin
with FormMain do
  begin
  TVOtdelSotrud.Items.BeginUpdate;
  TVOtdelSotrud.SortType:=stNone;
  TVOtdelSotrud.Items.Clear;
  ADOQueryOtdel.First;

  if ADOQueryOtdel.RecordCount>0 then
    begin
      while not ADOQueryOtdel.Eof do
      begin
      New(MyRecPtr);
        MyRecPtr^.id_o:=ADOQueryOtdel.FieldByName('id_o').Value;
        otdel_node:=TVOtdelSotrud.Items.AddObject(nil,ADOQueryOtdel.FieldByName('otdel_name').Text,MyRecPtr);
        field:= FormMain.ADOQueryOtdelID_O.AsString;
        ADOQuerySotrudniki.Close;
        ADOQuerySotrudniki.SQL.Text:='select id_sot,fio,otdel from sotrudniki where otdel='+chr(39)+field+chr(39);
        ADOQuerySotrudniki.ExecSQL;
        ADOQuerySotrudniki.open;
          if ADOQuerySotrudniki.RecordCount > 0 then
          begin
          ADOQuerySotrudniki.First;
            while not ADOQuerySotrudniki.Eof do
              begin
              New(MyRecPtr);
              MYRecPtr^.id_sot:=ADOQuerySotrudniki.FieldByName('id_sot').Value;
                sotrudnik_node:= TVOtdelSotrud.Items.AddChildObject(otdel_node,ADOQuerySotrudniki.FieldByName('fio').Text,MyRecPtr);
                ADOQuerySotrudniki.Next;
              end;
           end;
      ADOQueryOtdel.Next;
      end;
    end;
ADOQueryOtdel.Filter:='';
ADOQuerySotrudniki.Filter:='';
TVOtdelSotrud.Items.EndUpdate;
TVOtdelSotrud.FullExpand;
end;
WhiteDemon вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка на объект у узла TreeView Sanprof Общие вопросы C/C++ 0 25.11.2010 14:42
TreeView - картинка только у определенного узла Sanprof Общие вопросы Delphi 1 16.08.2010 14:09
Выборка выборка с таблицы с отношением многие-ко-многим 8alig8 БД в Delphi 2 24.06.2010 12:21
Вделение узла в TTreeView nikmay Общие вопросы Delphi 2 11.08.2009 17:02
Выборка значений ячеек DBGrid Македонский БД в Delphi 3 05.12.2007 08:10


13:19.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru