我要用checktreeview 做个用户权限管理的
     现在有checktreeview控件了,有ischecked,setallchecked,setchecked 方法,怎么实现代码的
     
    每个功能模块,怎么存到权限字段中,像
用户  权限
小张 10101001
小李 00000001 
  在线等,先谢谢了啊

解决方案 »

  1.   

    这我自己写的一段代码不知道对你是否有帮助
    procedure TPopeInfo_Form.Pope_SaveClick(Sender: TObject);
    var
    I :integer;
    BegD,EndD,BegT,EndT :string;
    begin
    if Pope_PageGroup.ActivePage  = TeTabSheet1 then
      begin
        if Length(Trim(Pope_UseID.Text))<>0 then
        begin      BegD := DateToStr(Pope_BeginDate.Date);
          EndD := DateToStr(Pope_EndDate.Date);
          BegT := FormatDateTime('HH:mm:ss',Pope_BeginDate.Time);
          EndT := FormatDateTime('HH:mm:ss',Pope_BeginDate.Time);
          DataForm.Read_Tables.Close;
          DataForm.Read_Tables.Connection := DataForm.SrvClient;
          DataForm.Read_Tables.SQL.Clear;
          DataForm.Read_Tables.SQL.Add('Exec Mis_WritePope ''1'','+
                                        ''''+Pope_UseID.Text+''''+','+
                                        ''''+mLoginID+''''+','+''''+BegD+''''+','+
                                        ''''+EndD+''''+','+''''+BegT+''''+','+
                                        ''''+EndT+'''');
          DataForm.Read_Tables.Open;
          DataForm.Read_Tables.LockType := ltBatchOptimistic;
          for I :=MenuGroup.Items.Count-1 downto 0 do
          begin
            if MenuGroup.ItemState[I] = csUnchecked then
            begin
              if DataForm.Read_Tables.Locate('cratename',MenuGroup.Items.Item[I].Text
                 ,[loCaseInsensitive]) then
              begin
                DataForm.Read_Tables.Edit;
                DataForm.Read_Tables.FieldByName('check').Value := '×';
                DataForm.Read_Tables.UpdateBatch(arAll);
              end;
            end;
          end;
          DataForm.Write_Tables.Close;
          DataForm.Write_Tables.Connection := DataForm.SrvClient;
          DataForm.Write_Tables.SQL.Clear;
          DataForm.Write_Tables.SQL.Add('Exec Mis_WritePope ''2'','+
                                        ''''+Pope_UseID.Text+''''+','+
                                        ''''+mLoginID+''''+','+''''+BegD+''''+','+
                                        ''''+EndD+''''+','+''''+BegT+''''+','+
                                        ''''+EndT+'''');
          DataForm.Write_Tables.ExecSQL;
          DataForm.Write_Tables.Close;
          Application.MessageBox('用户权限保存成功!','提示',MB_ICONINFORMATION+MB_OK);
          LoadPopeInfo;
        end;
      end;
    end;
      

  2.   

    保存用到SQL过程如下:
    ALTER            PROCEDURE Mis_CheckPope 
    @nID Char(6)
    AS
    If Exists(Select [name] from sysobjects where xtype='U' and [name]='mis_popetemp')
    Begin
       Drop Table mis_popetemp
    End
    If Exists(Select employeid from mis_popeinfo where employeid=@nID)
    Begin
       Select c.employeid,c.employee,a.menuid,a.menuname,b.crateid,b.cratename,b.hotkey,'×' as [check],c.groupflag,c.groupname
       Into mis_popetemp
       From mis_menuinfo as a,mis_cratinfo as b,(Select employeid,groupflag from mis_emplinfo where employeid=@nID) as d 
       Left join mis_emplinfo as c on c.groupflag=d.groupflag and c.employeid=d.employeid
       where a.menuid=b.menuid and c.employeid=@nID
       update mis_popetemp set [check]='√' where crateid in (select crateid from mis_popeinfo where employeid=@nID)
    /*
       Select c.employeid,c.employee,a.menuid,a.menuname,b.crateid,b.cratename,
    Case c.groupid 
    when '02' then b.adminuser 
    when '03' then b.commuser 
    when '04' then b.limituser 
    End as [check]
       Into mis_popetemp
       From mis_menuinfo as a,mis_cratinfo as b
       Left join mis_popeinfo as c on c.crateid=b.crateid 
       Where a.menuid=b.menuid and c.employeid=@nID
    */
    End
    Else
    Begin
       Select c.employeid,c.employee,a.menuid,a.menuname,b.crateid,b.cratename,b.hotkey,
            Case c.groupflag
    when '02' then b.adminuser
    when '03' then b.commuser
    when '04' then b.limituser
       End as [check],c.groupflag,c.groupname
       Into mis_popetemp
       From mis_menuinfo as a,mis_cratinfo as b,(Select employeid,groupflag from mis_emplinfo where employeid=@nID) as d 
       Left join mis_emplinfo as c on c.groupflag=d.groupflag and c.employeid=d.employeid
       where a.menuid=b.menuid and c.employeid=@nID
    End
      

  3.   

    一、创建所有权限的数据集,数据集创建一新字段(如:mycheck)用于权限的选择,然后用数据遍历的方式将数据写入checktreeview中
    二、在选择相应的权限项目时判断当前项目是否的状态是否是ischecked,如果为True根据checktreeview中所选的项目名称在数据集中查找相对应的数据,然后修改mycheck字段
    三、全部完成数据集保存到权限表中就可以了
      

  4.   

    procedure Tmodiuser_Form.FormCreate(Sender: TObject);
    var
       yhm,cdbh,cdmc,sqlstr:string;
    begin
        Caption:=usergl_form.xx;
        Query1.SessionName:=mainform.Database1.SessionName;
        Query1.DatabaseName:=mainform.Database1.DatabaseName;
        with tquery.Create(nil) do
        begin
            try
            Close;
            SessionName:=mainform.Database1.SessionName;
            DatabaseName:=mainform.Database1.DatabaseName;
            sqlstr:='select * from t_cdx order by 菜单项';
            SQL.Clear;
            SQL.Add(sqlstr);
            Open;
            First;
            while not Eof do
            begin
                cdbh:=fieldbyname('菜单项').AsString;
                cdmc:=fieldbyname('菜单名').AsString;
                Checklistbox1.Items.Add(cdbh+'&'+cdmc);
                if usergl_form.modi then
                begin
                    yhm:=usergl_form.Query1.fieldbyname('用户名').AsString;
                    sqlstr:='select * from t_qxb where(用户名='''+yhm+''')and(菜单项='''+cdbh+''')';
                    Query1.Close;
                    Query1.SQL.Clear;
                    Query1.SQL.Add(sqlstr);
                    Query1.Open;
                    if query1.RecordCount > 0 then
                        Checklistbox1.Checked[Checklistbox1.Count-1]:=true;
                end;
                Next;
            end;
            finally
            Free;
            end;
        end;
    end;procedure Tmodiuser_Form.SpeedButton1Click(Sender: TObject);
    var
        id,sqlstr1,sqlstr,cdbh,yhm,mm:string;
        i:integer;
    begin
        if usergl_form.modi then
            id:=usergl_form.Query1.fieldbyname('id').AsString;
        yhm:=trim(yhm_ledit.Text);
        if (length(yhm)<3) or (length(yhm)>20) then
        begin
            showmessage('用户名由3--20个字符组成!');
            exit;
        end;
        mm:=trim(mm_ledit.Text);
        if (length(mm)<3) or (length(mm)>20) then
        begin
            showmessage('密码由3--20个字符组成!');
            exit;
        end;
        sqlstr1:='select * from t_user where (用户名='''+yhm+''') and (id<>'''+id+''')';
        if usergl_form.modi then
            sqlstr:='update t_user set 用户名='''+yhm+''',密码='''+mm+ ''' where (id='''+id+''')'
        else
            sqlstr:='insert into t_user(用户名,密码) values('''+yhm+''','''+mm+''')';
        with tquery.Create(nil) do
        begin
            try
            SessionName:=mainform.Database1.SessionName;
            DatabaseName:=mainform.Database1.DatabaseName;
            SQL.Clear;
            SQL.Add(sqlstr1);
            Open;
            if  recordcount > 0 then
            begin
                showmessage('该用户名已经存在,请改用其他用户名!!!');
                exit;
            end;
            SQL.Clear;
            SQL.Add(sqlstr);
            ExecSQL;
            for i:=0 to checklistbox1.Count-1 do
            begin
                if usergl_form.modi then
                begin
                    cdbh:=copy(checklistbox1.Items.Strings[i],0,3);
                    if checklistbox1.Checked[i] then
                    begin
                        sqlstr:='select * from t_qxb where (用户名='''+yhm+''')and(菜单项='''+cdbh+''') order by 菜单项';
                        SQL.Clear;
                        SQL.Add(sqlstr);
                        Open;
                        if  recordcount <= 0 then
                        begin
                            sqlstr1:='insert into t_qxb(用户名,菜单项)values('''+yhm+''','''+cdbh+''')';
                            SQL.Clear;
                            SQL.Add(sqlstr1);
                            ExecSQL;
                        end;
                    end
                    else
                    begin
                        sqlstr:='delete from t_qxb where (用户名='''+yhm+''')and (菜单项='''+cdbh+''')';
                        SQL.Clear;
                        SQL.Add(sqlstr);
                        ExecSQL;
                    end;
                end
                else
                begin
                    cdbh:=copy(checklistbox1.Items.Strings[i],0,3);
                    if checklistbox1.Checked[i] then
                    begin
                        sqlstr1:='insert into t_qxb(用户名,菜单项)values('''+yhm+''','''+cdbh+''')';
                        SQL.Clear;
                        SQL.Add(sqlstr1);
                        ExecSQL;
                    end;
                end;
            end;
            finally
            Free;
            end;
        end;
        Close;end;