Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Процедура заполнения компонента TTreeView данными из TDataSet-совместимой выборки

Delphi , Базы данных , База данных



Автор: Delirium
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Процедура заполнения компонента TTreeView данными из TDataSet-совместимой
выборки типа: idNode int, idParentNode int, cNodeName varchar, ...

Важно: корневой узел дерева должен быть первой записью выборки.

Зависимости: Windows, SysUtils, DB, ComCtrls
Автор:       Delirium, Master_BRAIN@beep.ru, ICQ:118395746, Москва
Copyright:   Master BRAIN (Delirium)
Дата:        18 октября 2002 г.
***************************************************** }

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;

Пример использования:

FillTree(TreeView1, ADOQuery1, 'idDoc', 'idParentDoc', 'cDocument');

Преобразуем контент в русский язык:

Это процедура Delphi, называемая FillTree, которая пополняет компонентом TTreeView данными из запроса, совместимого с TDataSet. Процедура принимает четыре параметра:

  • Tree: компонент TTreeView, который нужно заполнить
  • Query: запрос, совместимый с TDataSet, из которого получать данные
  • idNode, idParent и cNodeName: строки, указывающие наименования столбцов в таблице запроса

Процедура предполагает, что первый запись в запросе является корневым узлом дерева, а затем она проходит по оставшимся записям для заполнения дерева дочерними узлами.

Вот разбор кода:

  1. Процедура начинает с очистки элементов компонента TTreeView методом Items.Clear.
  2. Затем она устанавливает фокус на первую запись в запросе методом First, и добавляет корневой узел к дереву методом Items.AddObject.
  3. Процедура затем вступает в цикл, который продолжается до тех пор, пока все записи в запросе не будут обработаны.
  4. Внутри цикла она проходит по каждому элементу дерева с помощью цикла while, проверяя, если текущий элемент соответствует значению столбца idParent в записи запроса. Если соответствие найдено, она добавляет дочерний узел к соответствующему родительскому узлу методом Items.AddChildObject.
  5. Наконец, процедура переходит на следующую запись в запросе методом Next.

Пример использования в конце кода показывает, как вызывать эту процедуру с компонентом ADOQuery и указать имена столбцов для ID, ID родителя и имени узла.

Некоторые предложения по улучшению:

  • Процедура предполагает, что первый запись в запросе является корневым узлом. Если это не гарантировано, вы можете добавить обработку ошибок или проверку, чтобы убедиться, что запрос имеет хотя бы одну запись перед попыткой заполнить дерево.
  • Процедура использует Pointer для хранения значений ID как данных для каждого узла. Это может быть неэффективно, если количество узлов становится большим. Вы можете рассмотреть использование более эффективной механики хранения, такой как массив целых чисел или словарь.
  • Процедура не обрабатывает ошибки хорошо. Если запрос fails или возвращает пустые записи, процедура просто прекращает работу без предупреждения. Вы можете добавить блоки try-except или код обработки ошибок, чтобы обеспечить, что процедура работает надежно в всех сценариях.

В целом, это полезная процедура для заполнения компонентом TTreeView данными из запроса базы данных. С некоторыми модификациями и улучшениями она могла быть сделана еще более robust и эффективной.

Процедура FillTree заполняет компонент TTreeView данными из TDataSet-совместимой выборки, начиная с корневого узла и рекурсивно добавляя дочерние узлы в зависимости от поля idParent.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: База данных ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-14 22:58:58/0.0065681934356689/0