这段的代码的错误提示为:
    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.

解决方案 »

  1.   

    看看状态条的面板,Panels[1]到底在不在!
    mainform.StatusBar1.Panels[1].Text:='操作员:'+trim(edit1.Text);
      

  2.   

    for i:=1 to dm1.query7.FieldCount-1 do
    因该是这个出错了吧,因该不是用fieldCount吧~,你需要的是记录条数,不是字段数
      

  3.   

    如果照楼上说的
    那程序就该改成:
    for i:=1 to dm1.query7.RecordCount-1 do
    代码太长,没时间看了,吃饭去了
      

  4.   

    mainform.MainMenu1.Items[i].Visible:=false改成
    mainform.MainMenu1.Items[i-1].Visible:=false
    应该是你的Menu越界了