如何在delphi中从数据库中检索数据并在Ttreeview中显示

如何在delphi中从数据库中检索数据并在Ttreeview中显示,delphi,treeview,delphi-7,Delphi,Treeview,Delphi 7,请帮助我从SQL数据库动态填充树视图。我对德尔福很陌生 我们欢迎循序渐进的过程。我在下图中给出了两种表格格式,我想从数据库中相应地填充树视图。我也在其他资源网站上搜索过,但没有找到我正在寻找的解决方案 我被卡住了。请帮帮我,伙计们。。。。 非常感谢 procedure TForm1.Button1Click(Sender: TObject); var // node : TTreeList; i: Integer; MyTreeNode1,MyTreeNode2 : TTreeNo

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

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

我被卡住了。请帮帮我,伙计们。。。。 非常感谢

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;

切换到
t提问
,然后尝试以下操作:

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;
procedure TForm1.按钮1点击(发送方:TObject);
变量
CurrentDeptID,RecordDeptID:整数;
RootNode,DeptNode:TTreeNode;
开始
CurrentDeptID:=0;
树列表1.Items.Clear;
RootNode:=TreeList1.Items.Add(nil,'Departments');
DeptNode:=nil;
ADOQuery1.SQL.Text:=“从子部门sd内部选择sd.DeptID、sd.Name、d.DeptID按d.DeptID、sd.Name在(sd.DeptID=d.DeptID)订单上加入部门d”;
ADOQuery1.打开;
尝试
A第一个问题;
而不是问1.Eof做什么
开始
RecordDeptID:=ADOQuery1.FieldByName('DeptID').AsInteger;
如果(DeptNode=nil)或(RecordDeptID CurrentDeptID),则
开始
DeptNode:=TreeList1.Items.AddChild(RootNode,ADOQuery1.FieldByName('Dept').AsString);
CurrentDeptID:=RecordDeptID;
结束;
TreeList1.Items.AddChild(DeptNode,ADOQuery1.FieldByName('Name').AssString);
ADOQuery1.下一步;
结束;
最后
ADOQuery1.关闭;
结束;
结束;

您看过这些吗?你的过程有两个步骤。步骤1是从数据库中检索数据。你有SQL查询吗?到目前为止,你尝试了什么,失败了什么?显示一些代码。@Jandogen我已将该数据存储到数据集“TTable”中,但当我想检索并在delphi表单上显示时,它失败了。。我无法从TTable中检索数据。。我的代码在那里不起作用。你不可能在一个表中拥有所有必需的数据。如果您有链接表,您应该(1)使用SQL语句检索数据以链接它们,然后使用返回该SQL数据的Delphi数据组件,然后遍历该数据并建立树,或者(2)(如果您坚持使用“单表”组件,如TTable)使用多个TTable,遍历第一个,在第二个文档中遍历相关数据,构建树。看起来您需要解决的第一个问题是“如何以允许我构建树的方式遍历数据”。您的
While
语句不正确。它应该读
,而不是ADOTable1.EOF Do
Next
语句应该读
ADOTable1.Next“+1”如何在检查某些条件后为现有节点添加子节点,例如如果“name1”=“name2”,则添加子节点。。谢谢,它工作得很好。这实际上取决于子节点代表什么以及它们的数据相对于其他表来自何处。SQL数据集非常简单,它不用于构建数据树,因此可能需要多个查询或多个联接。