unit main;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin, Menus;type
  TmainForm = class(TForm)
    MainMenu1: TMainMenu;
    StatusBar1: TStatusBar;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    N6: TMenuItem;
    N7: TMenuItem;
    procedure N2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  mainForm: TmainForm;implementation{$R *.dfm}
uses login;
procedure TmainForm.N2Click(Sender: TObject);
begin
 application.CreateForm(Tlogin_form,login_form);
 login_form.Show;
 n2.Enabled:=false;
end;end.主窗口的代码unit login;登录窗口的代码interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, DB, ADODB;type
  Tlogin_Form = class(TForm)
    Panel1: TPanel;
    yhm_Edit: TEdit;
    mm_Edit: TEdit;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    Button1: TButton;
    Button2: TButton;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  login_Form: Tlogin_Form;implementation{$R *.dfm}
uses main;procedure Tlogin_Form.Button1Click(Sender: TObject);
begin
close;
end;procedure Tlogin_Form.Button2Click(Sender: TObject);
var yhm,mm:string;
a,b:integer;
begin
   if (length(trim(yhm_edit.Text))>0) or (length(trim(mm_edit.Text))>0)  then
     begin
      yhm:=trim(yhm_edit.Text);
      mm:=trim(mm_edit.Text);
       with adoquery1  do
         begin
           sql.Clear;
           sql.Add('select* from yhb a,qxb b where (a.yhm=:yhm) and (a.mm=:mm)  and (a.yhm=b.yhm) order by b.cdx');
           Parameters.ParamByName('yhm').Value:=yhm;
           Parameters.ParamByName('mm').Value:=mm;
           open;           if recordcount>0 then
             begin
               First;
               while not eof do
                 begin
                   a:=strToint(copy(fieldByName('cdx').AsString,1,1));
                   B:=strToint(copy(fieldByName('cdx').AsString,2,2));
                   mainform.MainMenu1.Items[a].Visible:=true;
                   mainform.MainMenu1.Items[a].Items[b].Visible:=true;
                   next;
                 end;
               login_form.Close;
               mainform.StatusBar1.Panels[0].Text:=yhm;
             end
           else
             begin
               showMessage('请确认登录的用户至名与密码是否正确');
               yhm_edit.SelectAll;
               yhm_edit.SetFocus;
             end;
          close;
        end;
      end        else
        begin
          showMessage('请输入登录用户名与密码!');
          yhm_edit.SelectAll;
        end;
end;end.
每次输入密码与用户名就出现个错误'LIST INDEX OUT OF BOUNDS'应如何解决,高手出手啦

解决方案 »

  1.   

    可能是 mainform.MainMenu1.Items[a].Visible:=true;
                       mainform.MainMenu1.Items[a].Items[b].Visible:=true;
    中的一个下标值,超出了你的已存在下标最大值,导致的问题.
      

  2.   

    Try
      ....
    Exception
      ...
    End;
      

  3.   

    while not eof do
                     begin
                       mainform.MainMenu1.Items[a].Visible:=true;
                       mainform.MainMenu1.Items[a].Items[b].Visible:=true;
                       next;
                     end;
    什么意思啊?你要加菜单的话,动态添加才能用啊。
      

  4.   

    Try
      ....
    Exception
      ...
    End;
      

  5.   

    Parameters.ParamByName('yhm').Value:=yhm;
               Parameters.ParamByName('mm').Value:=mm;
    这里会不会有问题呢?
      

  6.   

    检查个用户名和密码 弄的这么麻烦但你的错误提示'LIST INDEX OUT OF BOUNDS'跟代码不挨边啊这分明是下标越界的提示你用了什么listbox或memo之类的控件了没有
      

  7.   

    误'LIST INDEX OUT OF BOUNDS',有什么地方数据益处,例如combox就有这样的情况
      

  8.   

    if recordcount>0 then
                 begin
                   First;
                   while not eof do
    把上面改成
    if adoquery1.recordcount>0 then
    begin
      adoquery1.First;
      while not adoquery1.eof do   试试。
      

  9.   

    mainform.StatusBar1.Panels[0].Text:=yhm;
    可能是你statusbar1没有初始化
    你看看object Ttreeview中的statubar1的panels下面有没有0-tstatuspanels,如没有的话,就是这里出错,只要add就可以了。
    另外一种可能,就如上面的分析啦