师父们,偶已经头大了:
偶用treeeview作用户管理,即 新用户+inttostr(count1)
偶想在新增用户时,先通过新用户与所有节点名称比较
判断inttostr(count1)是否为前一个的后续succ
如果是则intostr(count1)在最后一个后续,
如果不是则在没有后续的地方开始新增:新用户+inttostr(count1)
偶用如下代码,但总是异常 newname:='操作员'+inttostr(count1);
      for i:=0 to data.qu_tr.recordcount-1 do
          index:=(i-1)+2;
        if  newname=treeview1.Items[index].text then
            succ:=0
        else
            succ:=1;
        if  succ=0 then
           count1:=data.qu_tr.recordcount
        else
            count1:=data.qu_tr.recordcount+1;救命!!!!!!!!!!
  treeview如下:
  超级用户
    新用户+intostr(count1)
    ……
  普通用户
    新用户inttostr(count1)
    ……

解决方案 »

  1.   

    老千,
    其实偶已经实现 新用户X 的x递增,
    就是一旦该了 新用户X 即节点的默认名称,
    新建的 新用户X 不能填补刚才被改的
    而只能续在最大的X后,
    你有别的办法吗?
    只要能有上述功能就行的
      

  2.   

    看了你的程序才头大
    还是设计思路有问题
    我劝你还是放弃的Treeview吧
    因为只有两个主干节点超级和普通
    而且铺展级数只有两级
    这样用tree表示不合适
    界面也不友好
    我记得以前给你作过提示
    改用别的吧
      

  3.   

    在你修改那个名称的时候~~你应该能够取得那个用户的TreeNode的~~~~然后直接修改不就行了??
      

  4.   

    偶是担心 新用户x 中的x无限增大,因为x总是x-1的后续,而不管你前面
    是否删过已经建立的用户(或该过名的),
    比如:
      超级用户
        新用户1
        新用户2
        ……
        新用户14
    这时候,你把新用户2-6给删了,
    那么 再次新建时
    新用户14 之后还是 新用户15 
    而不是:先新用户2,新用户3……,直至新用户6后,在跳至 新用户15如果我不这样处理,新用户x 会随用户的删增而趋于极大
      

  5.   

    This is a progblem.
    But have you considered the user's number is so big?
    At most,there are 100 user is enough.
    I remind you,your program is working in single only not network!!
      

  6.   

    偶也想从长计议,
    不过,有一点,
    新用户的 x 不但受用户数量的支配,
    仅仅一次删减,也会影响到 x 的
    比如:
    超级用户下只有3各新用户
    但此时新用户最大的 x 有可能会是16,后继新建的就是17
    因为前面的已经被删了,也就是 删出新建 操作一次, x 就变大一回
      

  7.   

    不会的
    你的新用户名不可能只叫新用户***吧
    肯定是用人名或者其他不同的名字
    你可以设一个ID
    为自动增加值字段
    这个ID不对用户开放由内部使用用标唯一的标识一个用户
    不管用户名起得什么
    ID是唯一的
    虽然也有象你所说的问题什么新建后续的
    但是ID为integer型不可能会被用完
    除非用户删改大于10000000(保守)
    这是不可能的
      

  8.   

    老鱼说的可行,
    不过偶手边的例子,
    说明了用succ可以实现偶所说的功能,
    并且不复杂chechy师父:就是那天偶贴的代码,
    偶试验了,这个例子的确可以中间补漏,
    确保 默认用户的x 一直从 1----最大,中间不间断
    如果用户改变了 默认的新用户x 
    那么新建的新用户就会取代它,
    仍然实现x的连续,偶把代码再贴一次:procedure Tf_szkl.qx_newClick(Sender: TObject);
    var newName : string;
        index : integer;  //权限树索引
        namecount,succ : integer;  //姓名树、姓名不重复标志
    begin  //新建操作员
      //展开权限树
      qxtree.Items[0].Expand(False);
      qxtree.Items[1].Expand(False);  //打开权限内容数据库
      ds_data.Qu_qxcount.Close;
      ds_data.Qu_qxcount.Open;  //操作员总数+1
      pcount:=pcount+1;  //新建操作员的权限和管理员一样
      qxx:=f_gbv.pass_qxx.Caption;  //姓名初始化判断
      namecount:=1;  while (succ=0) do
      begin
           //姓名初始化
           newName:='新建操作员'+IntToStr(namecount);       //判断操作员姓名是否重复
           for i:=0 to pcount-1 do
           begin  //判断管理员和每一个操作员
                if i=0 then
                   index:=1  //管理员索引
                else
                   index:=(i-1)*(qxcount+3)+2;  //操作员索引###################  1
                if newName=qxtree.Items[index].Text then
                   namecount:=namecount+1;
      end;  //添加操作员姓名
      newNode:=qxtree.Items.AddChild(qxtree.Items[1],newName);
      newNode.StateIndex:=5;
      //添加操作员口令
      qxNode1:=qxtree.Items.AddChild(newNode,'设置口令');
      qxNode1.StateIndex:=4;
      qxtree.Items.AddChild(qxNode1,'jfos');  //添加操作员权限
      for j:=1 to qxcount do
      begin  //添加操作员权限
           qxNode1:=qxtree.Items.AddChild(newNode,ds_data.Qu_qxcount.FieldByName('name').AsString);
           ds_data.Qu_qxcount.Next;  //下一个权限内容
           //更新权限
           if qxx[j]='1' then
              qxNode1.StateIndex:=1
           else
              qxNode1.StateIndex:=3;
      end;  //关闭权限内容数据库
      ds_data.Qu_qxcount.Close;  //手动修改姓名
      newNode.Selected:=True;
      newNode.EditText;
    end;procedure Tf_szkl.qx_deleteClick(Sender: TObject);
    begin  //删除操作员
      if qxtree.Selected.AbsoluteIndex>1 then
         if qxtree.Selected.Level=2 then
            if Application.MessageBox(PChar('删除操作员 '+qxtree.Selected.Text), '询问', Mb_OKCancel)=IdOk then
            begin
                 qxtree.Items[qxtree.Selected.AbsoluteIndex].Delete;
                 pcount:=pcount-1;  //操作员总数-1
            end;     
    end;注意 1 处,chechy师父以前看过的,偶觉得他并复杂,但是偶无法掌握它
    求各位师父了,
      

  9.   

    up,chechy,老鱼,老千,小昂……
      

  10.   

    帮你Up~~~~要不然你赶快写一段不用Query的模拟程序~~我这里ADO坏了~~不能用了~~
      

  11.   

    偶所写的仅能解决子节点续数可以增大,
    并不解决问题,
    你对succ了解吗
      

  12.   

    刚看了一下~~Succ不就是找出一个东东的后面的东东的函数吗??
      

  13.   

    偶的例子好像就是用它使每个新建的用户先于所有用户比较,
    如有不连续的,就succ
    就是这一点代码,实现了补漏,//姓名初始化判断
     namecount:=1;
      while (succ=0) do
      begin
          //姓名初始化
          newName:='新建操作员'+IntToStr(namecount);      //判断操作员姓名是否重复
          for i:=0 to pcount-1 do
          begin  //判断管理员和每一个操作员
                if i=0 then
                  index:=1  //管理员索引
                else
                  index:=(i-1)*(qxcount+3)+2;  //操作员索引###################  1
                if newName=qxtree.Items[index].Text then
                  namecount:=namecount+1;
      end;
      
    并不复杂,而且偶反复试了,均没有问题,哪怕改了 新用户X 的text
    也能使X连续为一段integer  
      

  14.   

      while (succ=0) do~~~这么用也不对呀~~~
    你怎么自定义succ为Integer呢????
    succ是系统的函数~~~~你看看Delphi的帮助~~~Returns the successor of an argument.UnitSystemCategoryordinal routinesfunction Succ(X);DescriptionSucc returns the successor of the argument, X.X is an expression of an ordinal type (including Int64). The result, of the same type as X, is the successor of X. Do not use Succ on properties if the property uses a write procedure.
    uses Dialogs;
    type   Colors = (RED,BLUE,GREEN);
     var
       S: string;
     begin
       S := 'The predecessor of 5 is ' + IntToStr(Pred(5)) + #13#10;
       S := S + 'The successor of 10 is ' + IntToStr(Succ(10)) + #13#10;
       if Succ(RED) = BLUE then
         S := S + 'In the type Colors, RED is the predecessor of BLUE.';
       MessageDlg(S, mtInformation, [mbOk], 0);
     end;
      

  15.   

    偶也怀疑过这一点,好像就时当integer用的,
    偶提供该代码的下载地址,
    海阔天空 网站的,800k大
    你有时间看看吗??
      

  16.   

    老千保重,早日康复,偶一定尽力推荐你为版主计算机房管理系统:
    http://download.lycos.com.cn/soft_office/jfglxt.html
      

  17.   

    关键:
    偶知道怎实现那个mis的补漏功能
    你在 口令设置 里试试它的新建与删出
    包括更改 一个新建用户 的text后,再新建一个
    观察它的续数,全部是连续的把它移植到偶的程序里注:超级口令:0,1
      

  18.   

    how??????????????
    偶在这个程序里学会了用字符串
    但这treeview卡了壳
      

  19.   

    偶贴代码时,chechy也是此意,偶当时不太明白
    现在明白了,又不知该怎么用,
    succ是整形变量,还是函数呢?
      

  20.   

    偶的
    treeview如下:
      超级用户
        新用户+intostr(count1)
        ……
      普通用户
        新用户inttostr(count1)
        ……
    那么偶的index是否这样写
       index=(i-1)+2