小弟用以下代码做了一个登陆界面,但是怎么该都有错误,希望某位高手帮我做一个,不胜感激,用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.

解决方案 »

  1.   

    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;你在这里把adoquery1释放了,后面掉用的时候当然会出错阿而且你的程序好像是把主form给free了,这样会结束整个程序你把form2设为主窗口,把form1.show写在application.run前面就可以了
      

  2.   

    也不看你的了,一般我是这样来实现在DATAMODULE的CREATE中加入一个
    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
      

  3.   

    Form2.Show;
    Form1.close;---->把这行删除
      

  4.   

    我把Form1.close去掉也不行,请个位再想想办法
      

  5.   

    TO :
       jackiehb() 最大的可能是你的数据库里面表的命名问题。
    你试试,要不我把你的代码的原生代码发给你(数据库一起)给你
    我也遇到同样的问题,起初我认为是代码问题,其实是数据库的问题(表的列名称有错)!!!
      

  6.   

    发一个到你邮箱自己看看
    [email protected]
      

  7.   

    我用jinjazz(我是jin)的办法去掉了ADOQuery1.Free;又用thunderniao(雷鸟)的办法去掉了
    Form1.close;终于可以登陆了,非常谢谢大家。但是登陆界面却关不掉(Form1是登陆界面,Form2是主界面),请大家再帮我想想办法吧。在此也谢谢coreblood(菜码...)。
      

  8.   

    你的FORM的类型是子窗体把,
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Action := caFree;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
    form1:=nil;
    end;
      

  9.   

    楼上的代码放在什么位置呀?我放在下面的位置但是也不行,是不是放错地方了?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;
    Form1.close;
    Form2.showmodal;End;