你的程序中错误很多 1、首先是表的字段名拼错; procedure TLoginForm.Button1Click(Sender: TObject); var aname,apassword,sqlstr:string; a,b:integer; begin try MainForm.Database1.Open; except showMessage('数据库没有打开!'); end; //有输入时,从数据库中检验用户信息 if(Length(Trim(Name_Edit.Text))>0)or(Length(Trim(Password_Edit.Text))>0)then begin aname:=Trim(Name_Edit.Text); apassword:=Trim(Password_Edit.Text); sqlstr:='select * from user a,qxb b where(a.name='''+aname+''')'; sqlstr:=sqlstr+'and(a.password='''+apassword+''')and(a.name=b.name)'; sqlstr:=sqlstr+'order by b.cdx'; with TQuery.Create(nil)do try Close; //SessionName:=MainForm.Database1.SessionName; //不需要这段话 DatabaseName:=MainForm.Database1.DatabaseName; SQL.Clear; SQL.Add(sqlstr); 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.Items[a].Visible:=true; MainForm.MainMenu1.Items.Items[a].Items[b].Visible:=true; Next; end; //关闭登录窗口 LoginForm.Close; //主窗体状态栏显示登录用户名 MainForm.StatusBar1.Panels[0].Text:=aname; end else //验证不通过,提示错误信息 begin ShowMessage('请确认登录的用户名和密码是否正确!!!'); Name_Edit.SetFocus; Name_Edit.SelectAll; end; finally Free; end; end else //无输入,提示错误信息 begin ShowMessage('请输入登录用户名和密码!!!'); Name_Edit.SelectAll; end; end; 2、在Login的关闭事件中,修改如下 Action:=caFree; 3、main 中的StatusBar1控件,没有TStatusPanel对象,你在Login的确定事件中,写了 main.StatusBar1.Panels[0]:='XX'肯定是错误的,你可以在main窗体中,右击 StatusBar1控件,选择Panels Editor...,然后Add一个TStatusPanel对象就可以啦 最后祝你开心