//递归,深度优先
procedure TForm1.LoadTreeInfo;
type
  TInfo = record
    ID,      //设备代码
    Name,    //设备名称
    SuperID  //上级代码
      : string;
  end;
var
  sql: string;
  i, nCount: Integer;
  arrInfo: array of TInfo;
  NewNode: TTreeNode;  //加载一个节点
  procedure InitOneNode(ANode: TTreeNode; AId: string);
  var
    k: Integer;
  begin
    for k := 0 to length(arrInfo) - 1 do
      if arrInfo[k].SuperID = AId then
      begin
        NewNode := TreeView1.Items.AddChild(ANode, arrInfo[k].Name);
        InitOneNode(NewNode, arrInfo[k].ID);
      end;
  end;begin
  TreeView1.Items.BeginUpdate;
  TreeView1.Items.Clear;  sql := 'select distinct 设备名称,设备代码 from  machine_dm order by 设备代码';
  ADOQuery1.Close;
  ADOQuery1.SQL.Text := sql;
  ADOQuery1.Open;
  nCount := ADOQuery1.RecordCount;
  if nCount > 0 then
  begin
    SetLength(arrInfo, nCount);
    for i := 0 to nCount - 1 do
      with arrInfo[i] do
      begin
        ID := Trim(ADOQuery1.FieldByName('设备代码').AsString);
        Name := Trim(ADOQuery1.FieldByName('设备名称').AsString);
        SuperID := LeftStr(ID, 4);  //体现上下级编码规则,不过如果直接有一个上级代码字段,就可以直接取了
        ADOQuery1.Next;
      end;
  end;
  ADOQuery1.Close;  if nCount > 0 then
  begin
    InitOneNode(nil, '');  //假设顶级代码为空白
    TreeView1.FullExpand;
    TreeView1.Items.EndUpdate;
  end;
end;不能运行,你能把具体写在什么位置写清楚吗?是不是位置放错了,还是有些地方没有定义,我刚学delphi,请多多指教!