【问题标题】:How to retrieve data from database and display in Ttreeview in delphi如何从数据库中检索数据并在delphi的Ttreeview中显示
【发布时间】:2014-02-28 09:39:44
【问题描述】:

请帮助我从 SQL 数据库动态填充树视图。我对delphi很陌生

欢迎逐步进行。我在下图中给出了两种表格格式,我想相应地从数据库中填充树视图。我也在其他资源网站上搜索过,但没有找到我正在寻找的解决方案。

我被困住了。请大家帮帮我...... 非常感谢。

procedure TForm1.Button1Click(Sender: TObject);
var
  // node : TTreeList;
  i: Integer;
  MyTreeNode1,MyTreeNode2 : TTreeNode;
begin
   with TreeList1.Items do
   begin
        Clear;
        MyTreeNode1 := Add(nil, 'Table');
        ADOTable1.First;
        while ADOTable1 do
        begin
            AddChild(MyTreeNode1,'B') ;
            AddChild(MyTreeNode1,'c');
            Next;
        end;
   end;
end;

【问题讨论】:

  • 你的过程有两个步骤。第 1 步是从数据库中检索数据。你有你的 SQL 查询吗?到目前为止,您尝试了什么,什么失败了?显示一些代码。
  • @JanDoggen 我已将该数据存储到数据集“TTable”中,但是当我想检索并在 delphi 表单上显示时它失败了。我无法从 TTable 中检索数据。我的代码在那里不起作用
  • 不可能在一个 TTable 中拥有所有需要的数据。您有链接表,您应该(1)使用 SQL 语句检索数据以链接它们,然后使用 Delphi 数据组件返回该 SQL 数据,然后遍历该数据并构建您的树,或者(2) (如果你坚持使用像 TTable 这样的“单表”组件)使用多个 TTable,遍历第一个,遍历第二个中的关联数据,构建你的树。看起来您需要解决的第一个问题是“我如何以允许我构建树的方式遍历我的数据”。
  • 您的While 声明不正确。它应该是While Not ADOTable1.EOF DoNext 语句应该是ADOTable1.Next;

标签: delphi treeview delphi-7


【解决方案1】:

切换到TADOQuery,然后尝试以下操作:

procedure TForm1.Button1Click(Sender: TObject);
var
  CurrentDeptID, RecordDeptID: Integer;
  RootNode, DeptNode: TTreeNode;
begin
  CurrentDeptID := 0;
  TreeList1.Items.Clear;
  RootNode := TreeList1.Items.Add(nil, 'Departments');
  DeptNode := nil;
  ADOQuery1.SQL.Text := 'SELECT sd.DeptID, sd.Name, d.Dept FROM SubDepartments sd INNER JOIN Departments d ON (sd.DeptID = d.DeptID) ORDER BY d.Dept, sd.Name';
  ADOQuery1.Open;
  try
    ADOQuery1.First;
    while not ADOQuery1.Eof do
    begin
      RecordDeptID := ADOQuery1.FieldByName('DeptID').AsInteger;
      if (DeptNode = nil) or (RecordDeptID <> CurrentDeptID) then
      begin
        DeptNode := TreeList1.Items.AddChild(RootNode, ADOQuery1.FieldByName('Dept').AsString);
        CurrentDeptID := RecordDeptID;
      end;
      TreeList1.Items.AddChild(DeptNode, ADOQuery1.FieldByName('Name').AsString);
      ADOQuery1.Next;
    end;
  finally
    ADOQuery1.Close;
  end;
end;

【讨论】:

  • "+1" 如何在检查某些条件后为现有节点添加子节点,例如 if 'name1'='name2' then add subnode.. 谢谢它工作得很好..
  • 这实际上取决于子节点代表什么以及它们的数据相对于其他表的来源。 SQL 数据集非常扁平,它不适合构建数据树,因此您可能需要多个查询或多个 JOIN。
猜你喜欢
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 2017-07-31
  • 2018-02-26
  • 2018-11-21
  • 1970-01-01
相关资源
最近更新 更多