我想做一个登陆对话框,相关代码如下:
procedure TPasswordDlg.But_okClick(Sender: TObject);
begin
begin
with UnitModule.DataModule1 do
begin
Table2.Open ;
if Table2.FieldByName('用户密码').AsString =PasswordDlg.password.Text then
begin
loginistrue := True;
UnitModule.DataModule1.Table2.Post;
UnitModule.DataModule1.Table2.Close;
end
else
begin
UnitModule.DataModule1.Table2.Post;
UnitModule.DataModule1.Table2.Close;
end;
end;
end;
if loginistrue=true then
begin
frm_Main.Show;
//self.Free; //PasswordDlg.Close;
end
else
begin
Showmessage('密码不对,请重新输入...');
Edit1.Clear;
Edit1.SetFocus;
end;
end;
procedure TPasswordDlg.But_cancelClick(Sender: TObject);
begin
Application.Terminate;
end;
另外我在mainform中的相关代码是这样的:
procedure Tfrm_Main.FormCreate(Sender: TObject);
begin
PasswordDlg:=TpasswordDlg.Create(application);
PasswordDlg.ShowModal;
PasswordDlg.Free;
.....
end;
但在编译时怎老是出错呢?
请大家帮我看看是不是代码哪里有问题呢?
谢谢!
procedure TPasswordDlg.But_okClick(Sender: TObject);
begin
begin
with UnitModule.DataModule1 do
begin
Table2.Open ;
if Table2.FieldByName('用户密码').AsString =PasswordDlg.password.Text then
begin
loginistrue := True;
UnitModule.DataModule1.Table2.Post;
UnitModule.DataModule1.Table2.Close;
end
else
begin
UnitModule.DataModule1.Table2.Post;
UnitModule.DataModule1.Table2.Close;
end;
end;
end;
if loginistrue=true then
begin
frm_Main.Show;
//self.Free; //PasswordDlg.Close;
end
else
begin
Showmessage('密码不对,请重新输入...');
Edit1.Clear;
Edit1.SetFocus;
end;
end;
procedure TPasswordDlg.But_cancelClick(Sender: TObject);
begin
Application.Terminate;
end;
另外我在mainform中的相关代码是这样的:
procedure Tfrm_Main.FormCreate(Sender: TObject);
begin
PasswordDlg:=TpasswordDlg.Create(application);
PasswordDlg.ShowModal;
PasswordDlg.Free;
.....
end;
但在编译时怎老是出错呢?
请大家帮我看看是不是代码哪里有问题呢?
谢谢!
是不是应该写成 UnitModule.Table2.Post;
function Tfrm_Main.CheckPassword:Boolean;
var
RetryCount : Integer;
TempQuery: TQuery;
begin
TempQuery:=TQuery.Create(self);
Result :=False;
RetryCount:=0;
PasswordDlg :=TPasswordDlg.Create(self); //create password dialog While True do
begin
RetryCount := RetryCount+1; if RetryCount >= 4 then
Exit; if PasswordDlg.Showmodal = mrCancel then
Exit; With TempQuery do
begin
try
close;
SQL.Clear;
SQL.Add('Select * from 用户信息 where 用户名称='+''''+
PasswordDlg.Edit1.Text+'''');
Open;
finally
;
end;
if RecordCount <=0 then
Continue;
While PasswordDlg.But_ok.Click do if FieldByName('用户密码').AsString = PasswordDlg.password.Text then
begin
Result := True;
Break;
end;
end;
end; TempQuery.Free;
PasswordDlg.Free;end;
可是如果像上面这样,那么那个登陆框的bit_ok按钮的代码该如何写呢?我是这样写的:
procedure TPasswordDlg.But_okClick(Sender: TObject);begin
if frm_Main.CheckPassword then
begin
frm_Main.Show;
close;
end;
end;
可是这样编译出来的结果是,那个登陆框不消失,而且好像它并没于起到登陆框的作用。
请你帮我看看!如果代码不对,请你也帮我改写一下。谢谢了
2. 登录窗口里调用CheckPassword方法:if frm_Main.CheckPassword then ...之后两者交替循环,结果自然是....你不应该把创建登录窗体的逻辑放进检查密码的代码中,例如说应该把它放在MainForm的OnCreate事件里。此外一个建议:
'Select * from 用户信息 where 用户名称=' + '''' + PasswordDlg.Edit1.Text+ ''''写成'Select * from 用户信息 where 用户名称=' + QuotedStr(PasswordDlg.Edit1.Text)
是不是应该写成 UnitModule.Table2.Post;-----------------------------------------第一个UnitModule应该是单元名,后面的才是单元里的DataModule实例名。可能是怕多个单元里都有DataModule1才这么写吧。
请问是什么原因呢?肯请指点!
最好在单独的Unit里处理验证工作,通过验证之后在进行MainForm的处理.
建议Form之间的切换通过模态来.
比如:MainForm := TForm.Create(nil);
MainForm.ShowModal;
MainForm.Free;