基本情况:
USERS表结构:
 字段名:username, password, system, m01, m02, m03, m04, m05, m0101, m010101, m02, m0201....
    值:  abc   ,   1234  ,    0  ,  1 ,  1 ,  0 ,  0 ,  0      1      0      1      1 ....
我把我的所有菜单项的名字都作为一个字段存储在表中。我的MAIN_menu的情况,
每个一菜单都与数据库中USERS表中的一个字段对应,如一级菜单为m01,m02,m03.... 二级则为m0101等我想在MAIN_menu显示的时候,根据用户表中记录的值来决定哪个菜单可用,哪个不可用。问题:
1.我USER表是这样子设计可以吗?如果不是这样子设计的,那该如何设计,并告诉我理由。
2.我的动态显示菜单的代码应该写在哪里呢?
3.我的动态显示菜单的代码要怎么写?
4.如果我的问题问得傻,但我相信大家还是明白我的需求的,所以请告诉我你在处理这个事情时的设计逻辑。
谢谢大家啦。。
 

解决方案 »

  1.   

    1.你这样基本可以实现,只是扩展性不好——如果加一个菜单,你得修改表定义加一个字段?2.写在Create事件里3,4.
    用户登录进来,你就可以得到这个用户对应的记录。
    if ADOQuery1.FieldByName('m01').AsBoolean then m01.Visible := true;
    ....
    可以用循环完成
      

  2.   

    是啊,我也是觉得这样子不好,加一个菜单就得增加一个字段。。请告诉我怎么样实现啊。
    JeffChng说可以用循环完成,
    是不是得用数组?
      

  3.   

    我想知道如何遍历我的MAIN_menu菜单的项目???我只要知道怎样遍历菜单项,我就知道该怎么样做了。请大家告诉我简单的代码啊?是不是要用循环,那么循环的条件是什么??
    是不是用到MAIN_menu的哪个数组属性?
      

  4.   

    var
      i:integer;
    begin
      for i:=0 to MainMenu1.Items.Count-1 do begin
        MainMenu1.Items.Items[i].Visible:=false;
      end;
    end;
      

  5.   

    1.我USER表是这样子设计可以吗?如果不是这样子设计的,那该如何设计,并告诉我理由。这样设计不好,user表可以只包括,Username和password表.权限的设置应该再设计另外一个表,比如叫Menufunction
    字段包括: username, menuid,   menuCategory,  MenuName,         MenuSeq
                用户名  菜单ID    菜单分类     菜单显示标题    显示序号
                
    另外想对菜单有什么更详细的要求,可以再另外加字段.
     
    2.我的动态显示菜单的代码应该写在哪里呢? 写到FormCreate或FormShow里面,推荐后者.3.我的动态显示菜单的代码要怎么写? 从数据库中读取权限表,循环动态添加4.如果我的问题问得傻,但我相信大家还是明白我的需求的,所以请告诉我你在处理这个事情时的设计逻辑。
      

  6.   

    一个菜单表;保存菜单的Name,Caption
    一个用户(角色)权限表,保存用户编号和该用户(角色)拥有权限的菜单Name,主菜单添加时,只需初始化菜单表,FormShow时首先将所有菜单Enable设为False,然后根据从权限表取出的菜单Name改为True。