我做了一个迷你型小数据库,但是登陆窗口部分不能正常运行:无论登陆密码正确与否,软件都能进入主界面。请详细一点。谢谢!!!
我的代码是这样的:
procedure TOKBottomDlg.OKBtnClick(Sender: TObject);
var
edityhm,editmn,yhm,mn:string;
begin
edityhm:=trim(edit1.Text);
editmn:=trim(edit2.Text);
with txl_data.Data_txl.ADOQuery1 do begin
close;
Data_txl.ADOQuery1.SQL.Clear;
Data_txl.ADOQuery1.SQL.Add('select yhm,mn from yhmn');
data_txl.ADOQuery1.Open;
execsql;
end;
yhm:= data_txl.ADOQuery1.FieldValues['yhm'];
mn:= data_txl.ADOQuery1.FieldValues['mn']; if (edityhm=yhm)and(editmn=mn) then
begin
dialog.OKBottomDlg.Close
end
else
begin
label3.Visible:=true;
label3.Caption:='错误的用户名或密码,您无法使用本系统!';
end;end;
我的代码是这样的:
procedure TOKBottomDlg.OKBtnClick(Sender: TObject);
var
edityhm,editmn,yhm,mn:string;
begin
edityhm:=trim(edit1.Text);
editmn:=trim(edit2.Text);
with txl_data.Data_txl.ADOQuery1 do begin
close;
Data_txl.ADOQuery1.SQL.Clear;
Data_txl.ADOQuery1.SQL.Add('select yhm,mn from yhmn');
data_txl.ADOQuery1.Open;
execsql;
end;
yhm:= data_txl.ADOQuery1.FieldValues['yhm'];
mn:= data_txl.ADOQuery1.FieldValues['mn']; if (edityhm=yhm)and(editmn=mn) then
begin
dialog.OKBottomDlg.Close
end
else
begin
label3.Visible:=true;
label3.Caption:='错误的用户名或密码,您无法使用本系统!';
end;end;
通过认证 Tfrom1.show
不通过 报错
Application.Initialize;
Application.CreateForm(Tw_main, w_main);
Application.CreateForm(TData1, Data1);
try
Application.CreateForm(Tw_login, w_login);
if w_login.ShowModal = 1 then
begin
w_login.Free;
Application.Run ;
end ; except
end;
if suecced= false then exit
else
Application.CreateForm(Tw_login, w_login);
Application.Run;登陆窗口代码,先建一个全局变量suecced:boolean;
procedure Tw_login.suiButton1Click(Sender: TObject);
var
str,str1:string;
s:integer;
begin
data1.ADOConnection1.Connected :=true;
{str2:=datetostr(date);
if length(str2)<>10 then
MessageDlg('YYYY/MM/DD!',mtError,[mbOk],0)
else
begin }
str:=adotable1.Lookup('id',edit1.Text,'password');
str:=delzero(str);
str3:=combobox1.Items[combobox1.ItemIndex];
if edit2.Text=str then
begin
ModalResult :=1 ;
suecced:=true ;
end
else
begin
MessageDlg('对不起!你无权进入系统',mtError,[mbOk],0);
ModalResult :=0;
end ;
// end;
end;
var
edityhm,editmn,yhm,mn:string;
i:integer;
begin
edityhm:=trim(edit1.Text);
editmn:=trim(edit2.Text);
with txl_data.Data_txl.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select * from yhmn where yhm='''+edityhm+' and mn='''+editmn+'''');
Open;
i:=recordcount;
end;
if i>0 then
Close
else
begin
showmessage ('错误的用户名或密码,您无法使用本系统!');
application.Terminate ;
end;end;
Application.Initialize;
Application.CreateForm(TdengluForm, dengluForm);\\登录窗口运行,要有成功时的返回值和确定/取消
Application.Run;
dengluForm.hide;
dengluForm.Free;
if 成功 and 确定 then
begin
Application.Initialize;
Application.CreateForm(TFormMain, FormMain);\\主窗口运行
Application.Run;
end;
procedure Tw_login.BitBtn1Click(Sender: TObject);
var
str,str1: string;
begin
if length(label4.Caption)<10 then
MessageDlg('请将时间格式调整成YYYY/MM/DD', mtError, [mbOK], 0) ;
ModalResult := 0;
if length(label4.Caption)=10 then
begin
str1:=trim(edit2.Text);
str:=trim(edit3.Text);
adotable1.Locate('id', str1, []);
if trim(adotable1.fieldbyname('id').AsString )=str1 then
begin
if trim(adotable1.fieldbyname('password').AsString )=str then
begin
ModalResult := 1;
suecced := True;
end
else
begin
MessageDlg('对不起,你无权进入系统!' mtError, [mbOK], 0);
ModalResult := 0;
end;
end
else
begin
MessageDlg('对不起,你无权进入系统!', mtError, [mbOK], 0);
ModalResult := 0;
end;
end;
end;
不要两个都用。
open一般用于SELECT语句,有返回值;
EXECSQL用于UPDATE、INSERT等语句,不需要返回值。