菜鸟在此向各位大大请教了:
现在我做了登陆界面,根据各用户的角色权限显示main窗体中不同的菜单,我已经把MainMenu.Item.Name记录到数据库里面了,那我该如何处理呢?
以下是写了一段代码做测试(结果当然不通过的了),望指教:
      sql := 'select distinct MENU_CODE from SMS_POPEDOM where ROLE_CODE = '''+ class_no +''' and status=''1'' ';  //抽取菜单代码
      dmf.OraQuery1.Active := false;
      dmf.OraQuery1.SQL.Clear;
      dmf.OraQuery1.SQL.Add(sql);
      dmf.OraQuery1.Active := true;      while not dmf.OraQuery1.Eof do
        begin
          i := dmf.OraQuery1.Fields[0].AsString;
          main.MainForm.MainMenu1.Items[j].Name := i ;
          main.MainForm.MainMenu1.Items[j].Visible := true;
        end;在线等......

解决方案 »

  1.   

    可以考虑使用菜单下各按钮的tag属性和权限关联,到时只判断tag值,设置是否可用就可以了
      

  2.   

    TO Tensionli() 
      
       我修改了一下代码如下:
          //根据角色权限决定菜单的显示
          sql := 'select distinct TAG from SMS_POPEDOM where ROLE_CODE = '''+ class_no +''' and status=''1'' ';  //抽取菜单代码
          dmf.OraQuery1.Active := false;
          dmf.OraQuery1.SQL.Clear;
          dmf.OraQuery1.SQL.Add(sql);
          dmf.OraQuery1.Active := true;      while not dmf.OraQuery1.Eof do
            begin
              i := strtoint( dmf.OraQuery1.Fields[0].AsString );
              for j := 0 to main.MainForm.MainMenu1.Items.Count - 1 do
                for k := 0 to main.MainForm.MainMenu1.Items[j].Count  - 1 do
                  begin
                    if main.MainForm.MainMenu1.Items[j].Items[k].Tag = i then
                      begin
                        main.MainForm.MainMenu1.Items[j].Items[k].Visible := true ;
                      end;
                  end;
            end;这样写的话老半天都不会弹出主窗体,你有没有更好的方法呢?
      

  3.   

    问题已经解决了,原来自己楼了写一行代码:
    dmf.OraQuery1.next唉````