Правильная ссылка на эту страницу
http://az-design.ru/Support/DataBase/002b2800.shtml

Отображение содержимого узла в форме

Архангельский Андрей

English

       Отображение содержимого узла на форме требуется для того чтобы показать не только те поля, которые участвуют в построении дерева, но и различные описательные поля. Если показывать только один узел, то возникают проблемы с переходом к другим узлам. Поэтому решением задачи является отображение потомков узла в Grid, а уже строку этого Grida, отображать на форме. Таким образом можно получить возможность редактирования любых полей соответствующего потомок узла. Как это выглядит показано на рис.2-08


Рис.2-07 Отображение таблицы People в дереве


Рис.2-08 Отображение потомков узла в DBGrid и на форме.

       Сделать это просто в событии onChange:

procedure TForm1.tvPeopleChange(Sender: TObject; Node: TTreeNode); {Example01}
begin
  trNodePeople.Active := False;  trNodePeople.Active := True;
  qrNodePeople.Close;   qrNodePeople.SQL.Clear;
  qrNodePeople.SQL.Add('Select * from People');
  qrNodePeople.SQL.Add(' where Parent='+IntToStr(Node.ImageIndex));
  qrNodePeople.SQL.Add(' order by POrder');
// Для обеспечения редактирования
// Запрос на удаление
  updNodePeople.DeleteSQL.Clear;
  updNodePeople.DeleteSQL.Add('Delete from People');
  updNodePeople.DeleteSQL.Add(' where PID = :OLD_PID');
// Запрос на вставку
  updNodePeople.InsertSQL.Clear;
  updNodePeople.InsertSQL.Add('Insert into People(Parent,PSurName,PBrDate,');
  updNodePeople.InsertSQL.Add('PStatus,PSalary)');
  updNodePeople.InsertSQL.Add(' values('+IntToStr(Node.ImageIndex)+',');
  updNodePeople.InsertSQL.Add(':PSurName,:PBrDate,:PStatus,:PSalary)');
// Запрос на модификацию
  updNodePeople.ModifySQL.Clear;
  updNodePeople.ModifySQL.Add('Update People Set');
  updNodePeople.ModifySQL.Add(' POrder = :POrder,');
  updNodePeople.ModifySQL.Add(' PSurName = :PSurName,');
  updNodePeople.ModifySQL.Add(' PBrDate = :PBrDate,');
  updNodePeople.ModifySQL.Add(' PStatus = :PStatus,');
  updNodePeople.ModifySQL.Add(' PSalary = :PSalary');
  updNodePeople.ModifySQL.Add(' Where PID = :OLD_PID');
  qrNodePeople.Open;
end;

       В событии передается указатель на текущий узел. Из узла берется ID и в qrNodePeople строится запрос для выборки потомков текущего узла. Результат сортируется по полю POrder.
       Для обеспечения редактирования при использовании IBX используется дополнительный компонент IBUpdateSQL, в котором формируются соответствующие запросы на удаление, вставку, модификацию и обновление данных.
       Если используется библиотека IBObjects, то для обеспечения редактирования в основной запрос добавляется еще одна строка "for update" (См. пример Example01IBO).
       Для редактирования на форме вместо компонентов TEdit используются компоненты TDEdit, а контроль за форматом данных берет на себя БД и библиотека доступа.
       Построение интерфейса на PageControl или на одной странице всецело зависит от фантазии разработчика.

© 01.07.2007, Архангельский А.Г.

<<Пред. Оглавление
Начало раздела
Главная страница
След.>>




Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:44 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/DataBase/002b2800.shtml