小弟用以下代码做了一个登陆界面,但是怎么该都有错误,希望某位高手帮我做一个,不胜感激,用adoquery做,最好与我的代码相似,(尽量解释清楚些,小弟是新手,怕看不懂)发到,一旦能用,立刻给分,代码如下:procedure TForm1.okClick(Sender: TObject);begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Operator where UserName=:UserName and userpwd=:userpwd');
ADOQuery1.Parameters.ParamByName('UserName').value:=username.Text;
ADOQuery1.Parameters.ParamByName('userpwd').value:=password.Text;
ADOQuery1.Open;
If ADOQuery1.RecordCount=0 then
Begin
MessageDlg('请输入正确的用户名和密码',mtError,[mbok],0);
Exit;
End;
password.Text:=''; //密码信息要清空
ADOQuery1.Close;
ADOQuery1.Free;
Form2.Show;
Form1.close;
End;
//窗体创建时,读取操作者表中的操作者名称
procedure TForm1.FormCreate(Sender: TObject);Begin
username.clear;
Try
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select username from Operator');
ADOQuery1.Open;
If ADOQuery1.RecordCount=0 then
Begin
MessageDlg('没有可以登录的用户名',mtError,[mbok],0);
Exit;
End else
Begin
ADOQuery1.First;
While ADOQuery1.Eof=false do
Begin
username.Items.Add(ADOQuery1.FieldValues['Username']);
ADOQuery1.next;
End;
End;
ADOQuery1.Close;
ADOQuery1.Free;
username.ItemIndex:=0;
Except
MessageDlg('连接数据库出错!',mtError,[mbok],0);
End;
End;//登录窗体显示时,口令编辑框获得焦点
procedure TForm1.FormShow(Sender: TObject);
begin
password.SetFocus;
end;end.
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Operator where UserName=:UserName and userpwd=:userpwd');
ADOQuery1.Parameters.ParamByName('UserName').value:=username.Text;
ADOQuery1.Parameters.ParamByName('userpwd').value:=password.Text;
ADOQuery1.Open;
If ADOQuery1.RecordCount=0 then
Begin
MessageDlg('请输入正确的用户名和密码',mtError,[mbok],0);
Exit;
End;
password.Text:=''; //密码信息要清空
ADOQuery1.Close;
ADOQuery1.Free;
Form2.Show;
Form1.close;
End;
//窗体创建时,读取操作者表中的操作者名称
procedure TForm1.FormCreate(Sender: TObject);Begin
username.clear;
Try
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select username from Operator');
ADOQuery1.Open;
If ADOQuery1.RecordCount=0 then
Begin
MessageDlg('没有可以登录的用户名',mtError,[mbok],0);
Exit;
End else
Begin
ADOQuery1.First;
While ADOQuery1.Eof=false do
Begin
username.Items.Add(ADOQuery1.FieldValues['Username']);
ADOQuery1.next;
End;
End;
ADOQuery1.Close;
ADOQuery1.Free;
username.ItemIndex:=0;
Except
MessageDlg('连接数据库出错!',mtError,[mbok],0);
End;
End;//登录窗体显示时,口令编辑框获得焦点
procedure TForm1.FormShow(Sender: TObject);
begin
password.SetFocus;
end;end.
Exit;
End else
Begin
ADOQuery1.First;
While ADOQuery1.Eof=false do
Begin
username.Items.Add(ADOQuery1.FieldValues['Username']);
ADOQuery1.next;
End;
End;
ADOQuery1.Close;
ADOQuery1.Free;-----------------------------------------------〉〉〉〉〉〉错了
username.ItemIndex:=0;
Except
MessageDlg('连接数据库出错!',mtError,[mbok],0);
End;
End;你在这里把adoquery1释放了,后面掉用的时候当然会出错阿而且你的程序好像是把主form给free了,这样会结束整个程序你把form2设为主窗口,把form1.show写在application.run前面就可以了
var
login:Tlogin;
begin
login:=Tlogin.create(self);
try
login.showmodel;
login.free;
except
end;
然后呢在LOGIN中的ONCLICK中就可以加入了
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add(///验证字符串);
adoquery1.open;
if adoquery1.recordcount>0 then
begin
//通过验证
close;
end;
//这里是没通过的你所要执行的
//同时也可以加次数验证,
到了次数就可以APPlication.Terminate
Form1.close;---->把这行删除
jackiehb() 最大的可能是你的数据库里面表的命名问题。
你试试,要不我把你的代码的原生代码发给你(数据库一起)给你
我也遇到同样的问题,起初我认为是代码问题,其实是数据库的问题(表的列名称有错)!!!
[email protected]
Form1.close;终于可以登陆了,非常谢谢大家。但是登陆界面却关不掉(Form1是登陆界面,Form2是主界面),请大家再帮我想想办法吧。在此也谢谢coreblood(菜码...)。
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
form1:=nil;
end;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Operator where UserName=:UserName and userpwd=:userpwd');
ADOQuery1.Parameters.ParamByName('UserName').value:=username.Text;
ADOQuery1.Parameters.ParamByName('userpwd').value:=password.Text;
ADOQuery1.Open;
If ADOQuery1.RecordCount=0 then
Begin
MessageDlg('请输入正确的用户名和密码',mtError,[mbok],0);
Exit;
End;
password.Text:=''; //密码信息要清空
ADOQuery1.Close;
ADOQuery1.Free;
Form1.close;
Form2.showmodal;End;