急,登录窗口问题,这是小弟的课程设计中无法解决的一个问题,明天就要上交了。(50分)

  • 主题发起人 luckhacker
  • 开始时间
L

luckhacker

Unregistered / Unconfirmed
GUEST, unregistred user!
1、登录窗口中用户名用DBLookupComboBox控件从用户表中获得,如何使系统每次都可以选择一个初始用户。
2、如何实现不同权限的用户。
 
初始用户是你自己定义的!

用户的权限你因该定义在用户表中然后登陆读出简单的就是控制菜单的可见和不可见!
 
我是说的由系统自动选择一个用户,但DBLookupComboBox控件一开始不会处于选中某个用户的状态。
 
系统自动? 目前的电脑不是人,不可能存在什么自动的。要么你就用一个
INI文件保存一下上一次退出时的用户,或者用其它方法保存,进入的时候
读出这个值就行了。

至于权限,可以这样试试,就是设定各个菜单的TAG值不同(假设你是用的
MDI),然后建力一个权限库,如下:
//------------------------------------------
权限名称 权限分配值
打印 12 //这里的“权限分配值”对应菜单的Tag值
审核 15
设计报表 17
删除 21
进入系统时做一个循环就可以了。
//------------------------------------------

另外建议你在用户登陆这个地方不要用DB之类的控件,一个来说可控制能
力不太好,太容易让有心计的用户………,而且从程序设计方面来说,这
样也不利于用户界面的模块化。
 
lookupcombobox1.ItemIndex:=0
?????
 
to 娃娃:
可否给出具体的实例。
mail to:luckhacker@163.com
 
你可以在用户登录后将当前用户的ID号写到注册表或者Ini文件中,下一次登录时取出初始设置
用户列表下拉框
 
该如何设置呢?
 
唉,大富翁看来非要慢慢变成一个养懒人的地方了,一点脑子都不想动!
:-(

下面是检查权限的代码,原理大致为上所述,把每个用户的权限解密成AABABABABA
的形式,然后调用这个过程。我也给你的信箱发了一份。

Procedure TMainForm.CheckPower(power:string);
var FindMenu :integer;
begin
//权限检查
//方法:设定各个菜单的Tag属性不同,然后在PowerList库中
// 设定各项权限所能打开的Tag属性。检查权限的时候
// 就根据权限字符串来显示或隐藏菜单。

//1、先隐藏所有权限性菜单。
for FindMenu:=0 to MainForm.ComponentCount-1 do
begin
if MainForm.Components[FindMenu] is TMenuItem then
begin
if (MainForm.Components[FindMenu] as TMenuItem).Tag <>0 then
//等于0的是公共菜单,如退出程序,关于程序之类的。
(MainForm.Components[FindMenu] as TMenuItem).Visible := false;
end;
end;

//2、开始检查权限
try
with MainDataModule.UserSecADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('select * from powerlist');
Open;
while not Eof do
begin
if Copy(power,RecNO,1)='A' then
begin
if FieldByName('权限能力').AsInteger >0 then
begin
for FindMenu:=0 to MainForm.ComponentCount-1 do
begin
if MainForm.Components[FindMenu] is TMenuItem then
begin
if (MainForm.Components[FindMenu] as TMenuItem).Tag = FieldByName('权限能力一').AsInteger then
(MainForm.Components[FindMenu] as TMenuItem).Visible := true;
end;
end;
end;
end;
Next;
end;
end;
except
Application.MessageBox('调用权限表时出错,只能使用默认权限,请与系统管理员联系!',
'权限调用失败!',MB_OK);
end;
end;
 
上面的程序中还有很多值得优化的地方,你就自已动动脑子吧。
 
DBLookupComboBox.keyvalue:=query1.fieldbyname('name').asstring
 
多人接受答案了。
 
顶部