以前没有碰见过的奇怪问题?

Description of your first forum.

以前没有碰见过的奇怪问题?

帖子suncheng_hong » 星期日, 2005年12月4日 01:31


三次登陆问题.
现象:
第一次输入正确用户名和密码.   登陆成功
第一次输入错误用户名和密码,第二次输入正确用户名和密码,登陆框消失,点主窗体,又出现登陆框,第三次输入正确用户名和密码,登陆成功
代码:
unit Main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Menus, DB, ADODB;

type
 TMainForm = class(TForm)
   MainMenu1: TMainMenu;
   N1: TMenuItem;
   N2: TMenuItem;
   N3: TMenuItem;
   N4: TMenuItem;
   ADOConnection1: TADOConnection;
   ADODataSet1: TADODataSet;
   N5: TMenuItem;
   procedure FormActivate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 MainForm: TMainForm;
 username,password:string;
 i:integer;
implementation
uses
 Login;

{$R *.dfm}

procedure TMainForm.FormActivate(Sender: TObject);
var
 
 qx:array[1..5] of boolean;
 continue: boolean;

begin
 i:=3;
 continue:=true;
 while (i>0)and(continue=true) do
 begin
   LoginForm.ShowModal;
   if username<>'' then
   begin
    // ADODataSet1.Connection:=ADOConnection1;

     ADODataSet1.CommandType:=cmdText;
     AdoDataSet1.CommandText:='Select * from 操作员表 where 操作员名=:username';
     ADODataSet1.Close;
     ADODataSet1.Parameters.Clear;
     Adodataset1.Parameters.AddParameter;
     ADODataSet1.Parameters[0].Name:='username';
     ADODataSet1.Parameters[0].Value:=username;
     ADODataSet1.Parameters.AddParameter;
     ADODataSet1.Parameters[1].Name:='password';
     ADODataSet1.Parameters[1].Value:=password;
     adodataset1.active:=true;
    // showmessage(ADODataSet1.FieldByName('密码').value);

     if (adodataset1.Recordset.RecordCount=1)and
     (adodataset1.FieldByName('密码').Value=password) then
     begin
       i:=0;
       qx[1]:=adodataset1.FieldByName('权限一').AsBoolean;
       qx[2]:=adodataset1.FieldByName('权限二').AsBoolean;
       qx[3]:=adodataset1.FieldByName('权限三').AsBoolean;
       qx[4]:=adodataset1.FieldByName('权限四').AsBoolean;
       qx[5]:=adodataset1.FieldByName('权限五').AsBoolean;
       continue:=false;

     end
     else
     Application.MessageBox('用户名或密码错误','提示信息', mb_ok);
   end
   else
   close;
   i:=i-1;
 end; // while
 ADODataSet1.close;
 n5.Enabled:=false;
 n3.Enabled:=false;
 n4.Enabled:=false;
 if qx[1] then
 begin
   n5.Enabled:=true;
 end;
 if qx[2] then
 begin
   n3.Enabled:=true;
   n4.Enabled:=true;
 end;
 if i=0 then
 begin
 Application.Terminate;
 end;

 //Application.Terminate;
end;
end.



unit Login;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, DB, ADODB;

type
 TLoginForm = class(TForm)
   Label1: TLabel;
   Edit1: TEdit;
   Label2: TLabel;
   Edit2: TEdit;
   BitBtn1: TBitBtn;
   BitBtn2: TBitBtn;
   ADOConnection1: TADOConnection;
   procedure BitBtn2Click(Sender: TObject);
   procedure FormActivate(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }

 end;

var
 LoginForm: TLoginForm;

implementation
uses main;
{$R *.dfm}

procedure TLoginForm.BitBtn2Click(Sender: TObject);
begin
   close;
end;

procedure TLoginForm.FormActivate(Sender: TObject);
begin
     username:='';
     password:='';
     edit1.Text:='';
     edit2.Text:='';
     edit1.SetFocus;

end;

procedure TLoginForm.BitBtn1Click(Sender: TObject);
begin
     username:=edit1.text;
     password:=edit2.text;
     close;
end;



end.
 
 
 

以前没有碰见过的奇怪问题?

帖子Genl » 星期日, 2005年12月4日 08:50


procedure TForm1.FormActivate(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);

procedure TForm1.FormShow(Sender: TObject);

这3个事件你区分不开吧 换换试试
 
 
 

以前没有碰见过的奇怪问题?

帖子WilliamGui » 星期日, 2005年12月4日 10:01


简直就是乱来,怎么会写在FormActivate事件中呢?
FormCreate  创建窗口时发生
FormShow    接着发生
FormActivate  激活时发生(如当前窗口不是活动窗口,点击后就又会发生)
所以,你知道错在哪了吧。
一般来说,Login窗口的显示,应该写在工程文件中,成功后,再显示主窗口。
 
 
 

以前没有碰见过的奇怪问题?

帖子suncheng_hong » 星期日, 2005年12月4日 19:32


1.
各位大虾,我是初学者。看来我犯了致命的错误.我一直觉得是应写在FormCreate中比较和理.看过以前的帖子,说Login窗体要在工程中写.
2.
可是我从盒子里下的代码,怎么Login窗体都由FormActivate触发.而且写在主窗的FormActivate过程中.
 
 
 

以前没有碰见过的奇怪问题?

帖子suncheng_hong » 星期日, 2005年12月4日 22:33


接受答案了.
 
 
 

以前没有碰见过的奇怪问题?

帖子WilliamGui » 星期日, 2005年12月4日 23:23


不一定网上下载的都是对的,况且方法也没有绝对,只有好一点区别