我建了四个FORM:FrmMain、PFrmMain、MFrmMain,FrmLogin.
有个PERSON表:PERSONNO、AUTHORITY。
我想在单击登陆框FrmLogin的Bitbtn,后根据AUTHORITY的值进入不同的FROM,分别是FrmMain、PFrmMain、MFrmMain。 AUTHORITY的值为0时进入FrmMain;
AUTHORITY的值为1时进入PFrmMain;
AUTHORITY的值为2时进入MFrmMain. 登陆框上有组件:ADOQuery,ADOConncetion. edUername文本框,edPassword文本框.我
VAR:
A:string;
我想Select AUTHORITY from PERSON;
将查询后的AUTHORITY附给A,然后通过判断A的值,实现进入不同的FORM.
我不会写这段代码,请大家帮帮忙,除了这种方法还有其他方法能实现“在登陆后因权限不同进入不同的FORM”的吗?
有个PERSON表:PERSONNO、AUTHORITY。
我想在单击登陆框FrmLogin的Bitbtn,后根据AUTHORITY的值进入不同的FROM,分别是FrmMain、PFrmMain、MFrmMain。 AUTHORITY的值为0时进入FrmMain;
AUTHORITY的值为1时进入PFrmMain;
AUTHORITY的值为2时进入MFrmMain. 登陆框上有组件:ADOQuery,ADOConncetion. edUername文本框,edPassword文本框.我
VAR:
A:string;
我想Select AUTHORITY from PERSON;
将查询后的AUTHORITY附给A,然后通过判断A的值,实现进入不同的FORM.
我不会写这段代码,请大家帮帮忙,除了这种方法还有其他方法能实现“在登陆后因权限不同进入不同的FORM”的吗?
// delphi也是这个意识。
if (A == "0")
FrmMain->Show();
else if (A == "1")
PFrmMain->Show();
else if (A == "2")
MFrmMain->Show();
if A = 'frmMain' then
begin
if frmMain = nil then
frmMain := TfrmMain.Create(self);
frmMain.Showmodal;
Freeandnil(frmMain);
end
else
......
这个我知道,主要是我不知道如何将数据库查询后的值AUTHORITY赋给A,
我倒是建议你,用一个Form+PageControl
如果控件是在多不过,就用Frame做,然后放到3个PageControl的Page里去。
把FrmMain、PFrmMain、MFrmMain这三个Form全并为一个,
如:FrmMain,然后在上面建二个或三个panel,根据权限让相应的Panel显示,其他的隐藏。
adoquery.close;
adoquery.sql.clear;
adoquery.sql.text:='Select AUTHORITY from PERSON';
adoquery.open;
if not adoquery.isempty then
a:=adoquery.fieldByname('AUTHORITY').asstring;其他实现的方法参考其他楼的建议。
这三个主窗体不能合在一起吗,当你以不同的权限进入时,给用户的操作权限是不同的,比如:一个菜单下:用户增加,删除,修改...
你不同的权限进入只能操作不同的
大致的权限设计:
用户名
权限表
用户权限对应表登录后,用户读到权限信息,然后操作.
这个思想与5楼的有点相似之处,唯一不同是如果把三个窗体用PageControl做成不同的PageSheet,这个单独的窗体会比较大,没有将三个窗体独立出来,对日后的维护的调试会略有不便。
adoquery.sql.text:='Select AUTHORITY from PERSON';
adoquery.open;
If RecordCount > 0 Then
a:=adoquery.fieldByname('AUTHORITY').asstring;
procedure TFrmLogin.BtnLoginClick(Sender: TObject); //登陆系统
begin
with DM.Query do
begin
close;
sql.Clear;
sql.Add('select * from PERSON where NAME=:UN and PASSWD=:PW');
Parameters.ParamByName('UN').Value:=CBUserName.Text;
Parameters.ParamByName('PW').Value:=EDPassWord.Text;
Open;
if not DM.Query.IsEmpty then
A:=DM.Query.fieldbyname('AUTHORITY').AsString;
if A='1' THEN
Begin
FrmMain.ShowModal();
end
else if A='2' then
begin
MFrmMain.ShowModal();;
end
else if A='3' then
begin
PFrmMain.ShowModal();
end;
if recordCount <1 then
begin
Showmessage('对不起!用户名或密码错误!');
Exit;
end;
Close;
end;
end;
adoquery.sql.clear;
adoquery.sql.add('Select AUTHORITY from PERSON where name='''+edUername+''' and pwd='''+edPassword+''' ');
adoquery.open;
If RecordCount =1 Then
case adoquery.fieldByname('AUTHORITY').asinteger of
0:
begin
FrmMain.show;
end;
1:
begin
PFrmMain.show;
end;
2:
begin
MFrmMain.show;
end;
end;
procedure TFrmLogin.BtnLoginClick(Sender: TObject); //登陆系统
begin
with DM.Query do
begin
close;
sql.Clear;
sql.Add('select * from PERSON where NAME=:UN and PASSWD=:PW');
Parameters.ParamByName('UN').Value:=CBUserName.Text;
Parameters.ParamByName('PW').Value:=EDPassWord.Text;
Open;
if not DM.Query.IsEmpty then
A:=DM.Query.fieldbyname('AUTHORITY').AsString;
if A='1' THEN
Begin
FrmMain.ShowModal();
end
else if A='2' then
begin
MFrmMain.ShowModal();;
end
else if A='3' then
begin
PFrmMain.ShowModal();
end;
if recordCount <1 then
begin
Showmessage('对不起!用户名或密码错误!');
Exit;
end;
Close;
end;
end;
我个人理解:你的意思是更具登录的信息启动不同的主窗体。如果是这样的话,我认为应该吧登录部分放入program部分。
procedure TFrmLogin.BtnLoginClick(Sender: TObject); //登陆系统
begin
with DM.Query do
try
close;
sql.Clear;
sql.Add('select * from PERSON where NAME=:UN and PASSWD=:PW');
Parameters.ParamByName('UN').Value:=CBUserName.Text;
Parameters.ParamByName('PW').Value:=EDPassWord.Text;
Open;
if not DM.Query.IsEmpty then
begin
A:=DM.Query.fieldbyname('AUTHORITY').AsString;
modalresult := mrok;
end
else begin
Showmessage('对不起!用户名或密码错误!');
modalresult := mrcancel;
end;
finally
Close;
end;
end;主程序中
begin
...
if FrmLogin.showmodal = mrok then
begin
if FrmLogin.A = '1' then
application.createform(TFrmMain,FrmMain)
else
if FrmLogin.A = '2' then
application.createform(TMFrmMain,MFrmMain)
else
application.createform(TPFrmMain,PFrmMain);
end
else
application.terminate;
...
end;