但是有点小问题。。。
我的表设置
id mid name mark(权限)
1 0 a 1,2,3,4
2 0 b 1
3 0 c 1,2
.
.
11 1 a11 1,2,3
12 1 a12 1,2,3
21 2 a21 1
22 2 a22 1
.
.
.
权限有几个同时可以访问-----------------------------------------------------------------1
有个问题是,我实现时用的是1--9的判断,菜单超过9个就有问题了--------------------------------2
请问谁有其他的方法?-------------------------------------------------------------------3
权限进行设置的时候,在登陆框下拉判断,还要怎么设置好,请高手帮忙解决下,代码+思路,谢谢!!!
我的代码:
count1 := 0;
for i := 0 to 8 do
begin
k := i;
s1 := inttostr(k+1);
//得到第一级的总菜单
unit2.Form2.ADOQuery1.Close;
unit2.Form2.ADOQuery1.SQL.Clear;
unit2.Form2.ADOQuery1.SQL.Text :=('select mname from mlist where idkey='''+s1+'''');
unit2.Form2.ADOQuery1.Open;
unit2.Form2.ADOQuery1.First;
SetLength(files,adoquery1.RecordCount);
count1 := count1 + adoquery1.RecordCount;
for j:=0 to adoquery1.RecordCount-1 do
begin
files[j] :=tmenuitem.Create(self);
files[j].Caption := unit2.Form2.ADOQuery1.FieldByName('mname').AsString ;
MainMenu1.Items.Add(files[j]);
unit2.Form2.ADOQuery1.Next;
{ if j = 0 then
begin
MainMenu1.Items[j].Visible := false;
end}
end
end;
//********************第一级菜单完***************
//*****************得到第二级的菜单*****************
for num := 0 to count1-1 do
begin
s2 := inttostr(num+1);
unit2.Form2.ADOQuery1.Close;
unit2.Form2.ADOQuery1.SQL.Clear;
unit2.Form2.ADOQuery1.SQL.Text :=('select mname from mlist where mid='''+s2+'''');
unit2.Form2.ADOQuery1.Open;
unit2.Form2.ADOQuery1.First;
SetLength(files,adoquery1.RecordCount);
// count2 := count2 + adoquery1.RecordCount;
for j := 0 to adoquery1.RecordCount-1 do
begin
files[j] :=tmenuitem.Create(self);
files[j].Caption := unit2.Form2.ADOQuery1.FieldByName('mname').AsString ;
MainMenu1.Items[num].Add(files[j]);
unit2.Form2.ADOQuery1.Next;
end
end;
//**************第二级菜单完*****************
//************得到第三级菜单开始***************
for i := 0 to count1-1 do
begin
k := i;
s1 := inttostr(k+1);
for num :=0 to 8 do
begin
s2 := inttostr(num+1);
s3 := s1+s2;
unit2.Form2.ADOQuery1.Close;
unit2.Form2.ADOQuery1.SQL.Clear;
unit2.Form2.ADOQuery1.SQL.Text :=('select mname from mlist where mid='''+s3+'''');
unit2.Form2.ADOQuery1.Open;
unit2.Form2.ADOQuery1.First;
SetLength(files,adoquery1.RecordCount);
for j := 0 to adoquery1.RecordCount-1 do
begin
files[num] :=tmenuitem.Create(self);
files[num].Caption := unit2.Form2.ADOQuery1.FieldByName('mname').AsString ;
MainMenu1.Items[i].Items[num].Add(files[num]);
unit2.Form2.ADOQuery1.Next;
end
end
end
//*****三over*****
end;
6 个解决方案
#1
直接在初始读数据库数据的时候 没有权限的菜单项就不读了
此菜单项就不会出现在用户菜单列表里了
菜单超过九个有问题不明白什么意思
此菜单项就不会出现在用户菜单列表里了
菜单超过九个有问题不明白什么意思
#2
此类问题,我个人认为用递归 程序比较简单!
或者一次性把菜单读取到本地数组后,再循环处理或者一次性递归处理!我个人觉得为了这么简单的一件事情多次访问数据库
对应程序来说应该不合适或者说不是最好的选择!
或者一次性把菜单读取到本地数组后,再循环处理或者一次性递归处理!我个人觉得为了这么简单的一件事情多次访问数据库
对应程序来说应该不合适或者说不是最好的选择!
#3
我同意 jason_28693 的方法!!
#4
我明白你的意思,我的也是这个意思,就是有权限的就读出来,没有权限的就不读出来或者不可见,但是假如我让上面表中的2 0 b 不能读出来怎么设置?实施起来有点麻烦,这样指定了第一级的,后面的菜单都要不可见,不可能看不见主菜单却看见下面的子菜单了。。。
9个的问题是我建表是用的 主菜单用1 --- 9 第一级的子菜单用的是11 12 13 即第一个菜单的第一个子菜单这样命名的方式 超过了9个就不好命名了,有点局限性,我现在设置用a---z试试 你主菜单还超过26个了还。。。
这样设置是为了方面对以后的操作,要不不读取数据库我直接就可以添加了。。。。。
说的有点乱,请明白了的帮忙解决下,谢谢!!!
#5
to jason_28693:
我也觉访问太多了,请具体说明下你的方面,最好加点代码说明,谢谢!!!
我主要想动态加载菜单,方便以后添加,权限设置还有什么意见吗?
#6
基本解决菜单问题了额。。。。
那个权限问题怎么解决?登陆时候如何进行判断?初步考虑是判断mark中有没有关于权限设置的数字,
1,2,3指的是几个管理员操作员能访问的数字设置。。。
看有没有其他的什么解决办法。。。
那个权限问题怎么解决?登陆时候如何进行判断?初步考虑是判断mark中有没有关于权限设置的数字,
1,2,3指的是几个管理员操作员能访问的数字设置。。。
看有没有其他的什么解决办法。。。
#1
直接在初始读数据库数据的时候 没有权限的菜单项就不读了
此菜单项就不会出现在用户菜单列表里了
菜单超过九个有问题不明白什么意思
此菜单项就不会出现在用户菜单列表里了
菜单超过九个有问题不明白什么意思
#2
此类问题,我个人认为用递归 程序比较简单!
或者一次性把菜单读取到本地数组后,再循环处理或者一次性递归处理!我个人觉得为了这么简单的一件事情多次访问数据库
对应程序来说应该不合适或者说不是最好的选择!
或者一次性把菜单读取到本地数组后,再循环处理或者一次性递归处理!我个人觉得为了这么简单的一件事情多次访问数据库
对应程序来说应该不合适或者说不是最好的选择!
#3
我同意 jason_28693 的方法!!
#4
我明白你的意思,我的也是这个意思,就是有权限的就读出来,没有权限的就不读出来或者不可见,但是假如我让上面表中的2 0 b 不能读出来怎么设置?实施起来有点麻烦,这样指定了第一级的,后面的菜单都要不可见,不可能看不见主菜单却看见下面的子菜单了。。。
9个的问题是我建表是用的 主菜单用1 --- 9 第一级的子菜单用的是11 12 13 即第一个菜单的第一个子菜单这样命名的方式 超过了9个就不好命名了,有点局限性,我现在设置用a---z试试 你主菜单还超过26个了还。。。
这样设置是为了方面对以后的操作,要不不读取数据库我直接就可以添加了。。。。。
说的有点乱,请明白了的帮忙解决下,谢谢!!!
#5
to jason_28693:
我也觉访问太多了,请具体说明下你的方面,最好加点代码说明,谢谢!!!
我主要想动态加载菜单,方便以后添加,权限设置还有什么意见吗?
#6
基本解决菜单问题了额。。。。
那个权限问题怎么解决?登陆时候如何进行判断?初步考虑是判断mark中有没有关于权限设置的数字,
1,2,3指的是几个管理员操作员能访问的数字设置。。。
看有没有其他的什么解决办法。。。
那个权限问题怎么解决?登陆时候如何进行判断?初步考虑是判断mark中有没有关于权限设置的数字,
1,2,3指的是几个管理员操作员能访问的数字设置。。。
看有没有其他的什么解决办法。。。