我做了一个登录窗口
控件如下:adoquery、edit、maskedit、bitbtn1和bitbtn2、adoconnection
用的数据表是access
内容如下:
users   password    power(权限)
 123     123          1
 123     12345        2
 
在程序中用到了菜单,通过权限屏蔽菜单功能。原代码如下:
unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Mask, DB, ADODB;type
  TForm2 = class(TForm)
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
    MaskEdit1: TMaskEdit;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ADOQuery1Users: TWideStringField;
    ADOQuery1PassWord: TWideStringField;
    ADOQuery1Power: TIntegerField;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form2: TForm2;implementation
uses unit1;
{$R *.dfm}procedure TForm2.BitBtn2Click(Sender: TObject);
begin
  form1.MainMenu1.Items[0].Enabled:=true;
  form1.MainMenu1.Items[0].Items[0].Enabled:=false;
  form1.MainMenu1.Items[1].Enabled:=false;
  form1.MainMenu1.Items[2].Enabled:=false;
  close;
end;procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  if edit1.Text='' then
   edit1.SetFocus
  else
  begin
   adoquery1.Close;
   adoquery1.SQL.Clear;
   adoquery1.SQL.Add('select users,password,power from 用户表' );
   adoquery1.SQL.Add('where users='+edit1.Text);
   adoquery1.SQL.Add('and password='''+maskedit1.Text+'''');
   adoquery1.Open;
   if (adoquery1.RecordCount<>1) or (maskedit1.Text<>adoquery1.FieldValues['password']) then
   begin
     showmessage('口令不对,请检查!');
     edit1.SetFocus;
   end
   else
   begin
    if adoquery1.FieldValues['power']='1' then
    begin
     form1.MainMenu1.Items[0].Items[0].Enabled:=true;
     form1.MainMenu1.Items[0].items[1].Enabled:=true;
     form1.MainMenu1.Items[1].Enabled:=true;
     form1.MainMenu1.Items[2].Enabled:=true;
    end;
   if adoquery1.FieldValues['powew']='2' then
   begin
    form1.MainMenu1.Items[0].Items[0].Enabled:=false;
    form1.MainMenu1.Items[0].Items[1].Enabled:=true;
    form1.MainMenu1.Items[1].Enabled:=true;
    form1.MainMenu1.Items[2].Enabled:=false;
   end;
   if adoquery1.FieldValues['power']='3' then
   begin
    form1.MainMenu1.Items[0].Items[0].Enabled:=false;
    form1.MainMenu1.Items[0].Items[1].Enabled:=true;
    form1.MainMenu1.Items[1].Enabled:=false;
    form1.MainMenu1.Items[2].Enabled:=false;
   end;
   adoquery1.Close;
   close;
  end;
 end;
end;procedure TForm2.FormShow(Sender: TObject);
begin
   edit1.Text:='';
   maskedit1.Text:='';
end;procedure TForm2.FormActivate(Sender: TObject);
begin
  edit1.SetFocus;
end;end.谢谢了,我要的不是现成的代码,我只是想各位可以帮我改下,我可以在以后知道自己错在什么地方?分数不是问题!

解决方案 »

  1.   

    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, Mask, DB, ADODB;type
      TForm2 = class(TForm)
        ADOQuery1: TADOQuery;
        ADOConnection1: TADOConnection;
        MaskEdit1: TMaskEdit;
        Edit1: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        ADOQuery1Users: TWideStringField;
        ADOQuery1PassWord: TWideStringField;
        ADOQuery1Power: TIntegerField;
        procedure BitBtn2Click(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure FormActivate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation
    uses unit1;
    {$R *.dfm}procedure TForm2.BitBtn2Click(Sender: TObject);
    begin
      form1.MainMenu1.Items[0].Enabled:=true;
      form1.MainMenu1.Items[0].Items[0].Enabled:=false;
      form1.MainMenu1.Items[1].Enabled:=false;
      form1.MainMenu1.Items[2].Enabled:=false;
      close;
    end;procedure TForm2.BitBtn1Click(Sender: TObject);
    begin
      if edit1.Text='' then
       edit1.SetFocus
      else
      begin
       with ADOQuery do
        begin
         SQL.Clear;
         SQL.Text:='select users,password,power from 用户表 where users='''+Edit1.Text+''' and password='''+maskedit1.Text+'''';
         Open;
         if Eof then
          begin
           showmessage('口令不对,请检查!');
           edit1.SetFocus;
           Exit;
          end
        end 
       else
       begin
        if adoquery1.FieldValues['power']='1' then
        begin
         form1.MainMenu1.Items[0].Items[0].Enabled:=true;
         form1.MainMenu1.Items[0].items[1].Enabled:=true;
         form1.MainMenu1.Items[1].Enabled:=true;
         form1.MainMenu1.Items[2].Enabled:=true;
        end;
       if adoquery1.FieldValues['powew']='2' then
       begin
        form1.MainMenu1.Items[0].Items[0].Enabled:=false;
        form1.MainMenu1.Items[0].Items[1].Enabled:=true;
        form1.MainMenu1.Items[1].Enabled:=true;
        form1.MainMenu1.Items[2].Enabled:=false;
       end;
       if adoquery1.FieldValues['power']='3' then
       begin
        form1.MainMenu1.Items[0].Items[0].Enabled:=false;
        form1.MainMenu1.Items[0].Items[1].Enabled:=true;
        form1.MainMenu1.Items[1].Enabled:=false;
        form1.MainMenu1.Items[2].Enabled:=false;
       end;
       adoquery1.Close;
       close;
      end;
     end;
    end;procedure TForm2.FormShow(Sender: TObject);
    begin
       edit1.Text:='';
       maskedit1.Text:='';
    end;procedure TForm2.FormActivate(Sender: TObject);
    begin
      edit1.SetFocus;
    end;end.
      

  2.   

    procedure TForm2.BitBtn1Click(Sender: TObject);
    begin
      if edit1.Text='' then
       edit1.SetFocus
      else
      begin
       with ADOQuery1 do
        begin
         SQL.Clear;
         SQL.Text:='select users,password,power from 用户表 where users='''+Edit1.Text+''' and password='''+maskedit1.Text+'''';
         Open;
         if Eof then
          begin
           showmessage('口令不对,请检查!');
           edit1.SetFocus;
           Exit;
          end
         else
          begin
           if ADOQuery1['power']='1' then
            begin
             form1.MainMenu1.Items[0].Items[0].Enabled:=true;
             form1.MainMenu1.Items[0].items[1].Enabled:=true;
             form1.MainMenu1.Items[1].Enabled:=true;
             form1.MainMenu1.Items[2].Enabled:=true;
            end;
           if adoquery1.FieldValues['powew']='2' then
            begin
             form1.MainMenu1.Items[0].Items[0].Enabled:=false;
             form1.MainMenu1.Items[0].Items[1].Enabled:=true;
             form1.MainMenu1.Items[1].Enabled:=true;
             form1.MainMenu1.Items[2].Enabled:=false;
            end;
           if adoquery1.FieldValues['power']='3' then
            begin
             form1.MainMenu1.Items[0].Items[0].Enabled:=false;
             form1.MainMenu1.Items[0].Items[1].Enabled:=true;
             form1.MainMenu1.Items[1].Enabled:=false;
             form1.MainMenu1.Items[2].Enabled:=false;
            end;
            adoquery1.Close;
          end;
        end;
    end;
      

  3.   

    if adoquery1.FieldValues['powew']='2' thenpowew应该是打错了吧。思路没有大问题,结果不对,可能是逻辑上的问题。
      

  4.   

    Unit2是登录窗口,Unit1是主窗口,你程序出现的现象是不是不显示登录窗口而直接显示的主窗口?
      

  5.   

    //工程文件
    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2};{$R *.RES}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.ShowMainForm:=false;
      Form2:=TForm2.Create(Form2);
      Form2.Show();
      Application.Run;
    end.口令正确设置权限后添加如下代码:
    application.ShowMainForm:=true;
    Form1.Show();