unit Login_Unit;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, ComCtrls, StdCtrls, DB, ADODB;type
  TLogin_Form = class(TForm)
    StatusBar1: TStatusBar;
    Image1: TImage;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Name_Edit: TEdit;
    Password_Edit: TEdit;
    ADOQuery1: TADOQuery;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Password_EditKeyPress(Sender: TObject; var Key: Char);
    
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Login_Form: TLogin_Form;implementation
  uses Main_unit;//表示要访问主窗体的内容;{$R *.dfm}
//“取消”按钮的单击事件;
procedure TLogin_Form.Button2Click(Sender: TObject);
begin
  close;//关闭窗体;
end;
//“确定”事件 按钮的单击事件;
procedure TLogin_Form.Button1Click(Sender: TObject);
var
  aname,apassword,sqlstr:string;
  a,b:integer;begin
  //判断是否有输入;
  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 b*from [user] a.[qxb] b where (a.yhm='''+aname+''')and(a.mm='''+apassword+''')and(a.yhm=b.yhm)order by b.cdx';
    begin
    //with adoquery1.Create(nil) do;
      try
         //数据库的连接使用Main_From的 Adoquery1来完成;
         adoquery1.Connection:=Main_Form.ADOConnection1;//调用主窗体的查询控件;
         adoquery1.SQL.Clear;//清除上一次的SQL语句;
         adoquery1.SQL.Add(sqlstr);//添加查询语句;
         adoquery1.Active:=True;//打开其对应的表
      {except
         showMessage('数据库没有打开!');
      end;}         //判断是否有对应用户;
         if adoquery1.RecordCount>0 then
         begin
           //First:
           while not adoquery1.Eof do//当数据集的内容不为空时,执行begin end 内的代码;
           begin
             a:=StrToInt(copy(FieldByName('cdx').AsString,1,1));
             b:=StrToInt(copy(FieldByName('cdx').AsString,2,2));
             //是拥有权限的主窗体菜单可用;
             Main_Form.MainMenu1.Items[a].Visible:=True;
             Main_Form.MainMenu1.Items[a].Item[b].Visible:=True;
             Next;
          end;
          // 关闭登录窗口;
          Login_Form.Close;
          //主窗体状态栏显示登录用户名;
          Main_Form.StatusBar1.SimpleText:=aname;
          //主窗体全局变量dlname保存登录用户名;
          Main_Form.dlname:=aname;
          end
          else
          begin
            ShowMessage('请确认登录的用户名和密码是否正确!');
            Name_Edit.SetFocus;
            Name_Edit.SelectAll;
          end;
          end
      else
      begin
        ShowMessage('请输入登录用户名和密码!');
        Name_Edit.SelectAll;
        Password_Edit.SelectAll;
      end;
     //end;
   //end;
end;
procedure TLogin_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //使主窗体的“登录系统”菜单项可用;
  Main_Form.N2.Enabled:=True;
  //从内存中释放窗体,否则对于MDIChild窗口关闭无效;
  Action:=CaFree;
end;
//窗体按键按下事件,使用<Enter>键代替 <Tab>键;
procedure TLogin_Form.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then //判断是否按下<Enter>键;
  begin
    key:=#0;
    //焦点移动到下一个组件;
    Perform(WM_NEXTDLGCTL,0,0);
  end;end;
//密码输入框按键按下事件,可能会被窗体按键按下事件屏蔽;
procedure TLogin_Form.Password_EditKeyPress(Sender: TObject;
  var Key: Char);
begin
   //如果按下的是<Enter>键,执行确定按钮单击事件;
   if key=#13 then Button1.Click;
end;end.
[Error] Login_Unit.pas(77): Undeclared identifier: 'FieldByName'
[Error] Login_Unit.pas(77): Incompatible types
[Error] Login_Unit.pas(77): Missing operator or semicolon
[Error] Login_Unit.pas(90): EXCEPT or FINALLY expected
[Error] Login_Unit.pas(91): 'END' expected but 'ELSE' found
[Error] Login_Unit.pas(92): Missing operator or semicolon
[Fatal Error] Main_Unit.pas(43): Could not compile used unit 'Login_Unit.pas'

解决方案 »

  1.   

    [Error] Login_Unit.pas(77): Undeclared identifier: 'FieldByName'
    FieldByName是属于adoquery的属性,你没有指明FieldByName的所属,所以提示未定义,前面加上所属数据集名字,比如adoquery1.FieldByName
    [Error] Login_Unit.pas(77): Incompatible types
    原因如上
    [Error] Login_Unit.pas(77): Missing operator or semicolon
    原因如上
    [Error] Login_Unit.pas(90): EXCEPT or FINALLY expected
    try..Finally..except的匹配出问题,或者不完整
    [Error] Login_Unit.pas(91): 'END' expected but 'ELSE' found
    仔细检查begin。。end是否完整
    [Error] Login_Unit.pas(92): Missing operator or semicolon
    都是操作符,好好检查吧
      

  2.   

    with AdoQuery1 do   // 加这句..................................................
    while not adoquery1.Eof do//当数据集的内容不为空时,执行begin end 内的代码;
    begin
    a:=StrToInt(copy(FieldByName('cdx').AsString,1,1));
    b:=StrToInt(copy(FieldByName('cdx').AsString,2,2));
    //是拥有权限的主窗体菜单可用;
    Main_Form.MainMenu1.Items[a].Visible:=True;
    Main_Form.MainMenu1.Items[a].Item[b].Visible:=True;
    Next;
    end;
      

  3.   

    代码是书上的,自己改了一下,不知道有没有问题,谢谢大家了,麻烦大家再帮看看啦···
    ~~~~(>_<)~~~~