新学delphi,添加以下数据后,在treeview中没有显示任何东西,数据库连接成功procedure TMain.TreeviewReFresh;
       begin
         Node1:=Treeview1.Items.Add(nil,'通讯目录');
         ADOQuery3.Close;
         ADOQuery3.SQL.Text:='Select Distinct 类型 From msn';
         ADOQuery3.Open;
         if ADOQuery3.RecordCount>0 then
         begin
           while not ADOQuery3.Eof do
           begin
             Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);
             TreeView1.Items.AddChild(Node2,'');
             ADOQuery3.Next;
           end;
         end;
       end;

解决方案 »

  1.   

    procedure   TMain.TreeviewReFresh; 
                  begin 
                      Treeview1.Items.BeginUpdate;
                      Node1:=Treeview1.Items.Add(nil, "通讯目录 "); 
                      ADOQuery3.Close; 
                      ADOQuery3.SQL.Text:= "Select   Distinct   类型   From   msn "; 
                      ADOQuery3.Open; 
                      if   ADOQuery3.RecordCount >0   then 
                      begin 
                          while   not   ADOQuery3.Eof   do 
                          begin 
                              Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring); 
                              TreeView1.Items.AddChild(Node2, " "); 
                              ADOQuery3.Next; 
                          end; 
                      end;
                      Treeview1.Items.EndUpdate; 
                  end;
    试下,这样应该可以了
      

  2.   

    Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);   
    TreeView1.Items.AddChild(Node2,   "   "); 感觉这2句有问题,好像可以直接用TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);   替换这2句吧
      

  3.   

    你确认循环体执行了了吗?
       ADOQuery3.first; // 加上这句吧
        while   not   ADOQuery3.Eof   do 
        begin 
          Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring); 
          TreeView1.Items.AddChild(Node2, " "); 
          ADOQuery3.Next; 
        end; 
      

  4.   

    还是不行哦,我的DBGrid已经能够看出数据库内容了,说明连接数据库没有问题啊就是treeview空空如也。郁闷
      

  5.   

    viewstyle   有这个属性么?找不到阿
      

  6.   

    建议你调试一下,看下ADOQuery3.RecordCount是不是大于0,有没有进入
      

  7.   

    建议楼主单步调试。或者在某个地方用ShowMessage('xxx')方法调试
      

  8.   

    用单步来ShowMessage( "xxx ")  
    没有反映。
    recordcount 应该是2,因为我msn这张表里面有2种类型
      

  9.   

    delphi上是单引号,贴到这里来就是双引号了
      

  10.   

    就是treeview空空如也。郁闷,那说明这个函数根本就没有执行到。因为代码:
    Node1:=Treeview1.Items.Add(nil, "通讯目录 "); 至少会在树上增加一个节点,检查一下你代码中调用 TreeviewReFresh 函数的地方,是否由于其他原因在函数调用之前就退出,采用单步跟踪就可以追踪原因所在。
      

  11.   

    没有
    加个看看ADOQuery3.first; 
    procedure TMain.TreeviewReFresh; 
           begin 
             Node1:=Treeview1.Items.Add(nil, '通讯目录 '); 
             ADOQuery3.Close; 
             ADOQuery3.SQL.Text:= 'Select Distinct 类型 From msn '; 
             ADOQuery3.Open; 
              ADOQuery3.first
             if ADOQuery3.RecordCount >0 then 
             begin 
               while not ADOQuery3.Eof do 
               begin 
                 Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring); 
                 TreeView1.Items.AddChild(Node2, ' '); 
                 ADOQuery3.Next; 
               end; 
             end; 
           end;
      

  12.   

    首先你确定SQL语句是正确的么?
    Select Distinct 类型 From msn然后你要确定数据集是从第一个记录开始遍历的,你应该加上:ADOQuery3.First; 最后你还应该把 TreeView1.Items.AddChild(Node2,' ');注释掉,就象下面的代码:
    procedure TMain.TreeviewReFresh;  
           begin  
             Node1:=Treeview1.Items.Add(nil,  '通讯目录  ');  
             ADOQuery3.Close;  
             ADOQuery3.SQL.Text:=  'Select Distinct 类型 From msn  ';  
             ADOQuery3.Open;  
             ADOQuery3.first; 
             if ADOQuery3.RecordCount  >0 then  
             begin  
               while not ADOQuery3.Eof do  
               begin  
                 Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);  
                 //TreeView1.Items.AddChild(Node2,  '  ');  
                 ADOQuery3.Next;  
               end;  
             end;  
           end;
      

  13.   

    递归方式建立部门树
    Type
      PUnitNodeInfo  = ^TUnitNodeInfo;
      TUnitNodeInfo = record
        UnitCode:string;
        UnitName:string;    UnitPath:string;
       {在这个记录中,你还可以保存一些其它自己感兴趣的数据,比如部门经理等}
      end;
    procedure  TForm1.CreateUnitTree;
    var
      root : TTreeNode;
      NodeInfo : PUnitNodeInfo;
    begin
      TreeView1.Items.Clear;
      ADOQDepart.Close;
      ADOQDepart.SQL.Clear;
      ADOQDepart.SQL.Add('select * from 部门表 where 部门父号=''0'' ');
      AdoQDepart.Open;  if ADOQDepart.Eof then
      begin//如果数据为空,我们手动添加一个根部门,以公司名称命名
        with ADOQDelTree do
        begin
          close;
          Sql.Clear;
          Sql.Add('insert into 部门表 values(''001'',''公司'',''0'',''001'') ');
          ExecSQL;
        end;
      end;  ADOQDepart.Requery;
      while not ADOQDepart.Eof do
      begin
        New(NodeInfo);
        NodeInfo^.UnitCode:=ADOQDepart.FieldByName('部门编号').AsString;
        NodeInfo^.UnitName:=AdoQDepart.FieldByName('部门名称').AsString;
        NodeInfo^.UnitPath:=AdoQDepart.FieldByName('路径').AsString;    root:=TreeView1.Items.AddObjectFirst(nil,NodeInfo^.UnitName,NodeInfo); //添加根节点
        root.ImageIndex :=0 ;{设置节点图标索引,当然也可以不在此设置而在TreeView的事件中设置}
        root.SelectedIndex:=1;
        CreateSubTree(root);//递归
        AdoQDepart.Next;
      end;  if TreeView1.Items.Count <>0 then
        TreeView1.Items[0].Expanded:=True;end;
    procedure TForm1.CreateSubTree(root:TTreeNode);
    var AdoQSubDep:TADOQuery;
        TreeNode : TTreeNode;
        NodeInfo : PUnitNodeInfo;
        strId:string;  //父部门编号
    begin
      AdoQSubDep:=TADOQuery.Create(self);
      AdoQSubDep.Connection:=ADOConnection1;
      strId:=PUnitNodeInfo(root.Data)^.UnitCode;
      AdoQSubDep.Close;
      AdoQSubDep.SQL.Clear;
      AdoQSubDep.SQL.Add('select * from 部门表 where 部门父号='''+strId+''' ');
      AdoQSubDep.Open;
      while not AdoQSubDep.Eof do
      begin
        new(NodeInfo);
        NodeInfo^.UnitCode:=AdoQSubDep.FieldByName('部门编号').AsString;
        NodeInfo^.UnitName:=AdoQSubDep.FieldByName('部门名称').AsString;
        NodeInfo^.UnitPath:=AdoQSubDep.FieldByName('路径').AsString;
        TreeNode:=TreeView1.Items.AddChildObject(root,NodeInfo^.UnitName,NodeInfo);
        TreeNode.ImageIndex:=0;
        TreeNode.SelectedIndex:=1;
        CreateSubTree(TreeNode);
        ADOQSubDep.Next;
      end;
    end;
    procedure TForm1.FormShow(Sender: TObject);
    begin  CreateUnitTree;
    end;
      

  14.   

    你的TreeView与数据集没有扯上关系,
    增加记录后,没有调用Treeview.ReFresh