这段的代码的错误提示为:
raised exception class EListError with message'List index out of bounds(7)'
请高手帮助看一下,谢谢!
权限表qx的结构为: 用户名 菜单1 菜单2 菜单3 .............................菜单nunit loginroom;//系统的登陆窗体interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
Troomlogin = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
BitBtn2: TBitBtn;
BitBtn1: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
roomlogin: Troomlogin;
yhmi:string; //用户名
yhma:string //密码
i:integer;
implementationuses datadm, roommain, pwdmodify;{$R *.dfm}procedure Troomlogin.BitBtn2Click(Sender: TObject);
begin
application.Terminate;
end;procedure Troomlogin.BitBtn1Click(Sender: TObject);
begin
if trim(edit1.Text)='' then
begin
showmessage('用户名不能为空!');
edit1.SetFocus;
exit;
end;
if trim(edit2.Text)='' then
begin
showmessage('用户密码不能为空');
edit2.SetFocus;
exit;
end;
with dm1.query1 do
begin
close;
sql.Clear;
sql.text:='select * from userinfo where 用户名=:a and 密码=:b';
parameters.ParamByName('a').Value:=trim(edit1.Text);//取得登陆窗体中所输入的用户名
parameters.ParamByName('b').Value:=trim(edit2.Text)//取得登陆窗体中所输入的密码
open;
end;
if dm1.query1.RecordCount=1 then
begin
mainform.StatusBar1.Panels[1].Text:='操作员:'+trim(edit1.Text);
yhmi:=trim(edit1.Text);
yhma:=trim(edit2.Text);
roomlogin.Close;
end
else
begin
showmessage('非法的登录信息,请重新输入');
edit1.Clear;
edit2.Clear;
edit1.SetFocus;
end;
with dm1.query7 do //判断该用户所具有的权限
begin
close;
sql.Clear;
sql.add('select * from qx where 用户名=:loginid');//qx为权限表
parameters.ParamByName('loginid').Value:=yhmi;
open;
end;
for i:=1 to dm1.query7.FieldCount-1 do
begin
if dm1.query7.Fields[i].asinteger=1 then
mainform.MainMenu1.Items[i].Visible:=false;//是不是这个地方有问题,我看不出来
end; end;
end.
raised exception class EListError with message'List index out of bounds(7)'
请高手帮助看一下,谢谢!
权限表qx的结构为: 用户名 菜单1 菜单2 菜单3 .............................菜单nunit loginroom;//系统的登陆窗体interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
Troomlogin = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
BitBtn2: TBitBtn;
BitBtn1: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
roomlogin: Troomlogin;
yhmi:string; //用户名
yhma:string //密码
i:integer;
implementationuses datadm, roommain, pwdmodify;{$R *.dfm}procedure Troomlogin.BitBtn2Click(Sender: TObject);
begin
application.Terminate;
end;procedure Troomlogin.BitBtn1Click(Sender: TObject);
begin
if trim(edit1.Text)='' then
begin
showmessage('用户名不能为空!');
edit1.SetFocus;
exit;
end;
if trim(edit2.Text)='' then
begin
showmessage('用户密码不能为空');
edit2.SetFocus;
exit;
end;
with dm1.query1 do
begin
close;
sql.Clear;
sql.text:='select * from userinfo where 用户名=:a and 密码=:b';
parameters.ParamByName('a').Value:=trim(edit1.Text);//取得登陆窗体中所输入的用户名
parameters.ParamByName('b').Value:=trim(edit2.Text)//取得登陆窗体中所输入的密码
open;
end;
if dm1.query1.RecordCount=1 then
begin
mainform.StatusBar1.Panels[1].Text:='操作员:'+trim(edit1.Text);
yhmi:=trim(edit1.Text);
yhma:=trim(edit2.Text);
roomlogin.Close;
end
else
begin
showmessage('非法的登录信息,请重新输入');
edit1.Clear;
edit2.Clear;
edit1.SetFocus;
end;
with dm1.query7 do //判断该用户所具有的权限
begin
close;
sql.Clear;
sql.add('select * from qx where 用户名=:loginid');//qx为权限表
parameters.ParamByName('loginid').Value:=yhmi;
open;
end;
for i:=1 to dm1.query7.FieldCount-1 do
begin
if dm1.query7.Fields[i].asinteger=1 then
mainform.MainMenu1.Items[i].Visible:=false;//是不是这个地方有问题,我看不出来
end; end;
end.
mainform.StatusBar1.Panels[1].Text:='操作员:'+trim(edit1.Text);
因该是这个出错了吧,因该不是用fieldCount吧~,你需要的是记录条数,不是字段数
那程序就该改成:
for i:=1 to dm1.query7.RecordCount-1 do
代码太长,没时间看了,吃饭去了
mainform.MainMenu1.Items[i-1].Visible:=false
应该是你的Menu越界了