表TB1
字段ID(文本),parentid(文本),name(文本),怎么动态加载生成树呢?谢谢

解决方案 »

  1.   

    用来创建菜单吧?
    add.subitem.add
      

  2.   

    现成的代码,参考一下吧,改一下表名和字段名即可
    var
      List:TStringList;
      Node:TTreeNode;
      Index:Integer;
    begin
      with Querydo
      begin
        Close;
        SQL.Clear;
        SQL.Text:='SELECT * FROM '+TableName+' ORDER BY PID,ID';
        Open;
      end;
      TreeView.Items.BeginUpdate;
      try
        TreeView.Items.Clear;    List:= TStringList.Create;
        try
          List.Sorted:= True;      while not Query.Eof do
          begin
            if Query.FieldByName('PID').AsInteger= 0 then 
            Node:= TreeView.Items.AddChild(nil, Query.FieldByName(mName).AsString)
            else
            begin
              Index:= List.IndexOf(Query.FieldByName('PID').AsString);
              Node:= TreeView.Items.AddChildFirst(TTreeNode(List.Objects[index]),
                Query.FieldByName(mName).AsString);
            end;
            List.AddObject(Query.FieldByName('ID').AsString, Node);
            Query.Next;
          end;
        finally
          List.Free;
        end;
      finally
        TreeView.Items.EndUpdate;
      end;
      

  3.   

    通过循环判断生成树就可以了文件夹图标好说,用imagelist就行,在添加节点时,将节点的imageindex设成imagelist中对应图标的序号就行
      

  4.   

    呵呵 上面那代码可以.不过加文件夹图标怎么加,lovelymelon能告诉加哪里吗?
      

  5.   

    放个ImageList加入图标
    TreeView的Images指向ImageList1
    通过代码设置ImageIndex,默认为0
      

  6.   

    价格ImageList,里面加载图片,然后treeview的Images指定为这个ImageListNode:= TreeView.Items.AddChildFirst(TTreeNode(List.Objects[index]),
                Query.FieldByName(mName).AsString);
    Node.ImageIndex:=0;//这里加上这句
      

  7.   


    procedure TForm1.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
    begin
       node.ImageIndex:=1;
    end;procedure TForm1.TreeView1Collapsed(Sender: TObject; Node: TTreeNode);
    begin
      node.ImageIndex:=0;
    end;
      

  8.   


    //添加同级文件夹
    procedure TForm1.Button5Click(Sender: TObject);
    var
      node:Ttreenode;
    begin
      
      node:=self.TreeView1.Selected.Parent;
      node:=self.TreeView1.Items.AddChild(node,'fdfd') ;
      node.ImageIndex:=0;
    end;
    //添加下级文件夹
    procedure TForm1.Button6Click(Sender: TObject);
    var
      node:Ttreenode;
    begin
      
      node:=Self.TreeView1.Selected;
      node:=Self.TreeView1.Items.AddChild(node,'fdsfsdf');end;
    //删除
    procedure TForm1.Button7Click(Sender: TObject);
    begin
      self.TreeView1.Selected.Delete;
    end;
    //改名
    procedure TForm1.Button8Click(Sender: TObject);
    begin
      self.TreeView1.Selected.Text:='fsdfsdfds';
    end;
      

  9.   

    数据库保存嘛,对于你的数据库结构不清楚,只能大略说添加同级文件夹和下级文件夹吧用insert into,修改就用update,删除就用delete关键是要考虑到其父节点,如果父节点不为空,就要考虑条件了 如where 地区=东北啥啥的
    不知道你能不能明白
      

  10.   

    access数据库 表TB1
    字段ID(文本),parentid(文本),name(文本) 就是这样的结构啊.另外还有个SORT字段不要也可以.
      

  11.   

    每个节点都有个DATA属性,就是数据库的ID字段值,修改哪个节点,就先取出来这个节点的DATA,在去数据库中修改ID=data数据行就行了,你应该补补基础知识了
      

  12.   

    ID         parentid     name          sort
    1            0        工程文件夹           1
    1.1          1           XX工程            0
    1.1.1        1.1         OO段              0
    1.2          1           YY工程            0就是这样啊,不会发图..
      

  13.   

    DATA是指针类型的吧?我要怎么才能取到他的值呢?
      

  14.   

    添加同级文件夹//添加同级文件夹
    procedure TForm1.Button5Click(Sender: TObject);
    var
      node,node1:Ttreenode;
    begin
      node:=self.TreeView1.Selected.Parent;
      node1:=self.TreeView1.Items.AddChild(node,'fdfd') ;
      node1.ImageIndex:=0;
      if node=nil then
      begin
        m:=0;
        i:=self.TreeView1.Items.Count;
        for j:=0 to i-1 do
        begin
          if self.TreeView1.Items[j].Parent=nil then
            m:=m+1;
        end;
        self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add('insert into tablename (id,parent,name,sort) values(:s1,:s2,:s3,1)');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=inttostr(m+1);
        self.ADOQuery1.Parameters.ParamByName('s2').Value:=0;
        self.ADOQuery1.Parameters.ParamByName('s3').Value:='fdfd';
        self.adoquery1.ExecSQL
      end
      else
      begin
        i:=node.GetLastChild.Index+1;
        s:=node.text;
        self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add(select * from tablename where name=:s1');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=s;
        self.adoquery1.Open;
        bh:=self.adoquery1.fieldbyname('id').asstring;
        self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add('insert into tablename (id,parent,name,sort) values(:s1,:s2,:s3,1)');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=bh+'.'+inttostr(i);
        self.ADOQuery1.Parameters.ParamByName('s2').Value:=bh;
        self.ADOQuery1.Parameters.ParamByName('s3').Value:='fdfd';
        self.adoquery1.ExecSQL
      end;
    end;
      

  15.   

    哎,空写代码太麻烦了添加下一级的数据库保存与添加同级的差不多//添加下级文件夹
    procedure TForm1.Button5Click(Sender: TObject);
    var
      node,node1:Ttreenode;
    begin
      node:=self.TreeView1.Selected;
      node1:=self.TreeView1.Items.AddChild(node,'fdfd') ;
      node1.ImageIndex:=0;
      i:=node.GetLastChild.Index+1;
      s:=node.text;
      self.adoquery1.close;
      self.adoquery1.connection:=self.adoconnection1;
      self.adoquery1.sql.clear;
      self.adoquery1.sql.add(select * from tablename where name=:s1');
      self.ADOQuery1.Parameters.ParamByName('s1').Value:=s;
      self.adoquery1.Open;
      bh:=self.adoquery1.fieldbyname('id').asstring;
      self.adoquery1.close;
      self.adoquery1.connection:=self.adoconnection1;
      self.adoquery1.sql.clear;
      self.adoquery1.sql.add('insert into tablename (id,parent,name,sort) values(:s1,:s2,:s3,1)');
      self.ADOQuery1.Parameters.ParamByName('s1').Value:=bh+'.'+inttostr(i);
      self.ADOQuery1.Parameters.ParamByName('s2').Value:=bh;
      self.ADOQuery1.Parameters.ParamByName('s3').Value:='fdfd';
      self.adoquery1.ExecSQL
    end;
      

  16.   

    删除//添加下级文件夹
    procedure TForm1.Button5Click(Sender: TObject);
    var
      node,node1:Ttreenode;
    begin
      node1:=self.TreeView1.Selected;
      s:=node1.text;
      node:=node1.parent;
      if node=nil then
      begin
        i:=node1.index+1;
        self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add(delete from tablename where name=:s1 and id=:s2');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=s;
        self.ADOQuery1.Parameters.ParamByName('s2').Value:=inttostr(i);
        self.adoquery1.ExecSQL;
      end
      else
      begin
        s1:=node.text;
        self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add(select * from tablename where name=:s1 and parent=''0''');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=s1;
        self.adoquery1.Open;
        bh:=self.adoquery1.fieldbyname('id').asstring;    self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add(delete from tablename where name=:s1 and parent=:s2');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=s;
        self.ADOQuery1.Parameters.ParamByName('s2').Value:=bh;
        self.adoquery1.ExecSQL;  end;
    end;
      

  17.   

       lovelymelon,你这种写法是根据node1.text来从数据库中取唯一值ID,但是node1.text不一定是唯一值呢,所以从数据库中取出的ID有可能有多个,这样不都乱了吗?
      

  18.   

    如果text不是唯一的,就要在生成树的时候为每个节点创建一个data,里面包含此节点的id,在操作时,不取其text,而是取其data中的id值
    给数节点添加data和读取data内容的参考代码如下,剩下的就简单了,你自己搞定吧unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, StdCtrls, Buttons, ComCtrls;
    //定义一个树结构
    type
      tmx=packed record
        bh:array[0..100] of string;//这个可以作为存放ID的字符串数组
    end;
    pmx=^tmx;
    //**********************
    type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        TreeView1: TTreeView;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        Label1: TLabel;
        Label2: TLabel;
        procedure FormShow(Sender: TObject);
        procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
          var CanSelect: Boolean);
        procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
        procedure BitBtn1Click(Sender: TObject);
        procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}//添加节点,并为每个节点创建一个data
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      p:pmx;
      tn:TTreeNode;
    begin
      new(p);
      p.bh[0]:='010001';
      p.bh[1]:='010002';
      self.TreeView1.Items.Clear;
      tn:=self.TreeView1.Items.Add(nil,'1');//创建父节点
      //创建子节点,并为其关联一个结构体,123和234是节点的text
      self.TreeView1.Items.AddChildObject(tn,'123',p);
      self.TreeView1.Items.AddChildObject(tn,'234',p);
    end;
    //读取节点的data内容
    procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      tn:TTreeNode;
      s1,s2:string;
      i:Integer;
    begin
      tn:=self.TreeView1.GetNodeAt(x,y);
      if tn=nil then
        Exit;
      if tn.Parent=nil then
        Exit;
      i:=tn.Index;
      s1:=pmx(tn.Data).bh[i];
      self.Label1.Caption:=s1;
      self.Label2.Caption:=s2;
    end;
      

  19.   

    lovelymelon,能帮我改下吗/?我现在建树的过程是这样的!procedure TfrmManage.UpdateTreeView;
    var
      List:TStringList;
      Node:TTreeNode;
      Index:Integer;
    begin
      with DM.aqryManage   do
      begin
        Close;
        SQL.Clear;
        SQL.Text:='SELECT * FROM List ORDER BY ParentID,ID';
        Open;
      end;
      tvGCList.Items.BeginUpdate;
      try
        tvGCList.Items.Clear;    List:= TStringList.Create;
        try
          List.Sorted:= True;      while not DM.aqryManage.Eof do
          begin
            if DM.aqryManage.FieldByName('ParentID').AsString= '0' then
            begin
              Node:= tvGCList.Items.AddChild(nil, DM.aqryManage.FieldByName('mc').AsString);
              Node.ImageIndex:=0
            end
            else
            begin
              Index:= List.IndexOf(DM.aqryManage.FieldByName('ParentID').AsString);
              Node:= tvGCList.Items.AddChildFirst(TTreeNode(List.Objects[index]),
              DM.aqryManage.FieldByName('mc').AsString);
              Node.ImageIndex:=0
            end;
            List.AddObject(DM.aqryManage.FieldByName('ID').AsString, Node);
            DM.aqryManage.Next;
          end;
        finally
          List.Free;
        end;
      finally
        tvGCList.Items.EndUpdate;
      end;
    end;
      

  20.   

    procedure TfrmManage.UpdateTreeView;
    var
      List:TStringList;
      Node:TTreeNode;
      Index:Integer;
    begin
      with DM.aqryManage   do
      begin
        Close;
        SQL.Clear;
        SQL.Text:='SELECT * FROM List ORDER BY ParentID,ID';
        Open;
      end;
      tvGCList.Items.BeginUpdate;
      try
        tvGCList.Items.Clear;    List:= TStringList.Create;
        try
          List.Sorted:= True;      while not DM.aqryManage.Eof do
          begin
            if DM.aqryManage.FieldByName('ParentID').AsString= '0' then
            begin
              Node:= tvGCList.Items.AddChild(nil, DM.aqryManage.FieldByName('mc').AsString);
              Node.ImageIndex:=0
            end
            else
            begin
              Index:= List.IndexOf(DM.aqryManage.FieldByName('ParentID').AsString);
              Node:= tvGCList.Items.AddChildFirst(TTreeNode(List.Objects[index]),
              DM.aqryManage.FieldByName('mc').AsString);
              Node.ImageIndex:=0
            end;
            List.AddObject(DM.aqryManage.FieldByName('ID').AsString, Node);
            DM.aqryManage.Next;
          end;
        finally
          List.Free;
        end;
      finally
        tvGCList.Items.EndUpdate;
      end;
    end;
      

  21.   

    结合上面我给你那段代码,那里有结构体的定义,你试试procedure TfrmManage.UpdateTreeView;
    var
      List:TStringList;
      Node:TTreeNode;
      Index,i:Integer;
      p:pmx;
      mc:string;
    begin
      new(p);
      with DM.aqryManage   do
      begin
        Close;
        SQL.Clear;
        SQL.Text:='SELECT * FROM List ORDER BY ParentID,ID';
        Open;
      end;
      tvGCList.Items.BeginUpdate;
      try
        tvGCList.Items.Clear;    List:= TStringList.Create;
        try
          List.Sorted:= True;      while not DM.aqryManage.Eof do
          begin
            i:=DM.aqryManage.RecNo;
            s:=DM.aqryManage.FieldByName('ID').AsString;
            mc:=DM.aqryManage.FieldByName('mc').AsString;
            p.bh[i-1]:=s;
            if DM.aqryManage.FieldByName('ParentID').AsString= '0' then
            begin
              Node:= tvGCList.Items.AddChildObject(nil, mc,p);
              Node.ImageIndex:=0
            end
            else
            begin
              Index:= List.IndexOf(DM.aqryManage.FieldByName('ParentID').AsString);
              Node:= tvGCList.Items.AddChildObject(TTreeNode(List.Objects[index]),mc,p);
              Node.ImageIndex:=0
            end;
            List.AddObject(DM.aqryManage.FieldByName('ID').AsString, Node);
            DM.aqryManage.Next;
          end;
        finally
          List.Free;
        end;
      finally
        tvGCList.Items.EndUpdate;
      end;
    end;
      

  22.   

            i:=DM.aqryManage.RecNo;
            s:=DM.aqryManage.FieldByName('ID').AsString;
            mc:=DM.aqryManage.FieldByName('mc').AsString;
            p.bh[i-1]:=s;
    这里运行的时候DM.aqryManage.RecNo=-1了,所以运行到p.bh[i-1]:=s就提示出错了,这是怎么回事呢?
    提示
      

  23.   

    不可能吧,在循环里怎么会出现这种情况  DM.aqryManage.First;//加上这句试试
      while not DM.aqryManage.Eof do
      begin
        i:=DM.aqryManage.RecNo;
        s:=DM.aqryManage.FieldByName('ID').AsString;
        mc:=DM.aqryManage.FieldByName('mc').AsString;或者这样  i:=0;//
      while not DM.aqryManage.Eof do
      beign
        i:=i+1;
        s:=DM.aqryManage.FieldByName('ID').AsString;
        mc:=DM.aqryManage.FieldByName('mc').AsString;
      

  24.   

    这样生成的树用鼠标点击节点后显示的ID值与数据库里面ID值对不上号....
      

  25.   

    procedure TfrmManage.tvGCListClick(Sender: TObject);
    var
      tn:TTreeNode;
      i:Integer;
      s1:string;
    begin
      tn:=tvGCList.Selected;
      if tn=nil then
       Exit;
      if tn.Parent=nil then
        Exit;
      i:=tn.Index;
      s1:=pmx(tn.Data).bh[i];
      ShowMessage(s1);
    end;
      

  26.   

           
    begin
      Index:= List.IndexOf(DM.aqryManage.FieldByName('ParentID').AsString);
      Node:= tvGCList.Items.AddChildObject(TTreeNode(List.Objects[index]),mc,p);
      Node.ImageIndex:=0
    end;
    可能是这段有问题
      

  27.   


    procedure TfrmManage.tvGCListClick(Sender: TObject);
    var
      tn:TTreeNode;
      i:Integer;
      s1:string;
    begin
      tn:=tvGCList.Selected;
      if tn=nil then
       Exit;
      if tn.Parent=nil then
        Exit;
      i:=tn.AbsoluteIndex;//这里改了试试,你那样去的index不对
      s1:=pmx(tn.Data).bh[i];
      ShowMessage(s1);
    end;
      

  28.   

    生成树的代码改成这样,哎,直接在网页上写代码真是难啊procedure TfrmManage.UpdateTreeView;
    var
      List,list1:TStrings;
      Node:TTreeNode;
      Index,i,m,n,k:Integer;
      p:pmx;
      mc:string;
    begin
      new(p);
      with DM.aqryManage   do
      begin
        Close;
        SQL.Clear;
        SQL.Text:='SELECT * FROM List ORDER BY ParentID,ID';
        Open;
      end;
      tvGCList.Items.BeginUpdate;
      try
        tvGCList.Items.Clear;    List:= TStringList.Create;
        List.Clear;
        List1:= TStringList.Create;
        List1.Clear;    try
          
          while not DM.aqryManage.Eof do
          begin
            i:=DM.aqryManage.RecNo;
            s:=DM.aqryManage.FieldByName('ID').AsString;
            mc:=DM.aqryManage.FieldByName('mc').AsString;
            p.bh[i-1]:=s;
            if DM.aqryManage.FieldByName('ParentID').AsString= '0' then
            begin
              Node:= tvGCList.Items.AddChildObject(nil, mc,p);
              Node.ImageIndex:=0;
              k:=node.AbsoluteIndex;
              if list.index(s)=-1 then
              begin
                List.Add(s);
                list1.add(inttostr(k));
              end;
            end
            else
            begin
              Index:= List.IndexOf(DM.aqryManage.FieldByName('ParentID').AsString);
              k:=strtoint(list1.strings[index]);
              Node:= tvGCList.Items.AddChildObject(TTreeNode(k),mc,p);
              Node.ImageIndex:=0
            end;
            DM.aqryManage.Next;
          end;
        finally
          List.Free;
        end;
      finally
        tvGCList.Items.EndUpdate;
      end;
    end;
      

  29.   

    靠,还是差了些东西,应该这样
    靠,已经发三帖了,郁闷啊,等吧
    我发给你的这个,你试了?还有什么问题?procedure TfrmManage.UpdateTreeView;
    var
      List,list1:TStrings;
      Node:TTreeNode;
      Index,i,m,n,k:Integer;
      p:pmx;
      mc:string;
    begin
      new(p);
      with DM.aqryManage   do
      begin
        Close;
        SQL.Clear;
        SQL.Text:='SELECT * FROM List ORDER BY ParentID,ID';
        Open;
      end;
      tvGCList.Items.BeginUpdate;
      try
        tvGCList.Items.Clear;    List:= TStringList.Create;
        List.Clear;
        List1:= TStringList.Create;
        List1.Clear;    try
          
          while not DM.aqryManage.Eof do
          begin
            i:=DM.aqryManage.RecNo;
            s:=DM.aqryManage.FieldByName('ID').AsString;
            mc:=DM.aqryManage.FieldByName('mc').AsString;
            p.bh[i-1]:=s;
            if DM.aqryManage.FieldByName('ParentID').AsString= '0' then
            begin
              Node:= tvGCList.Items.AddChildObject(nil, mc,p);
              Node.ImageIndex:=0;
              k:=node.AbsoluteIndex;
              if list.index(s)=-1 then
              begin
                List.Add(s);
                list1.add(inttostr(k));
              end;
            end
            else
            begin
              Index:= List.IndexOf(DM.aqryManage.FieldByName('ParentID').AsString);
              k:=strtoint(list1.strings[index]);
              Node:= tvGCList.Items.AddChildObject(TTreeNode(k),mc,p);
              Node.ImageIndex:=0;
              k:=node.AbsoluteIndex;
              if list.index(s)=-1 then
              begin
                List.Add(s);
                list1.add(inttostr(k));
              end;        end;
            DM.aqryManage.Next;
          end;
        finally
          List.Free;
        end;
      finally
        tvGCList.Items.EndUpdate;
      end;
    end;
      

  30.   

    //添加同级文件夹
    procedure TForm1.Button5Click(Sender: TObject);
    var
      node,node1:Ttreenode;
    begin
      node:=self.TreeView1.Selected.Parent;
      node1:=self.TreeView1.Items.AddChild(node,'fdfd') ;
      node1.ImageIndex:=0;
      if node=nil then
      begin
        m:=0;
        i:=self.TreeView1.Items.Count;
        for j:=0 to i-1 do
        begin
          if self.TreeView1.Items[j].Parent=nil then
            m:=m+1;
        end;
        self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add('insert into tablename (id,parent,name,sort) values(:s1,:s2,:s3,1)');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=inttostr(m+1);
        self.ADOQuery1.Parameters.ParamByName('s2').Value:=0;
        self.ADOQuery1.Parameters.ParamByName('s3').Value:='fdfd';
        self.adoquery1.ExecSQL
      end
      else
      begin
        i:=node.GetLastChild.Index+1;//得到i的值为6
        s:=node.text;
        self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add(select * from tablename where name=:s1');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=s;
        self.adoquery1.Open;
        bh:=self.adoquery1.fieldbyname('id').asstring;
        self.adoquery1.close;
        self.adoquery1.connection:=self.adoconnection1;
        self.adoquery1.sql.clear;
        self.adoquery1.sql.add('insert into tablename (id,parent,name,sort) values(:s1,:s2,:s3,1)');
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=bh+'.'+inttostr(i);//**
        self.ADOQuery1.Parameters.ParamByName('s2').Value:=bh;
        self.ADOQuery1.Parameters.ParamByName('s3').Value:='fdfd';
        self.adoquery1.ExecSQL
      end;
    end;
    这段代码,如果我先在的ID是 1.1,1.2,1.3,1.6,1.7.因为我把1.6删掉了所以这样.
     i:=node.GetLastChild.Index+1;//得到i的值为6
    最后
        self.ADOQuery1.Parameters.ParamByName('s1').Value:=bh+'.'+inttostr(i);//**
        self.ADOQuery1.Parameters.ParamByName('s2').Value:=bh;
        self.ADOQuery1.Parameters.ParamByName('s3').Value:='fdfd';
        self.adoquery1.ExecSQL
    插入的时候s1就等于1.6了,这样和以前的ID重复了,ID是唯一的.
      

  31.   

    不加表和字段也行就是从表中查询某parentid下所有的id,然后得出最后一个.后的数字,最大的那个加1就是你现在的了
    这个的确很麻烦
      

  32.   

    聪明,最后一个.前面的肯定是parentid,后面的就是顺序号了,取其最大值加1,然后组合起来就是新添加节点的id了