procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select * from users');
adoquery1.sql.add('where names='+quotedstr(edit1.text));
adoquery1.open;
if adoquery1.fields[0].value=null then
begin
messagedlg('请确认你输入的用户名是否正确',mtwarning,[mbok],0)
end
else if
adoquery1.fields[2].value=quotedstr(edit2.text) then
begin
form1.Hide;
form2.show;
end
else
begin
messagedlg('密码错误',mtwarning,[mbok],0);
exit;
end;
end;
SQL SERVER数据库
表名:suers
userid       names    passwd
001           xl       0002
002           ll       1234现在问题是不论你输入正确的密码还是错误的密码都是提示密码错误,请那位高手麻烦解答一下

解决方案 »

  1.   

    这一句要改:
    else if adoquery1.fields[2].value = edit2.text then
      

  2.   

    quotedstr()这个函数表示将一个字符串以如下表示:''''+字符串+'''',所以你的quotedstr(edit2.text)就变成了''''+edit2.text+''''
    所以不对。
      

  3.   

    嗯,将 adoquery1.fields[2].value=quotedstr(edit2.text) then 改为:adoquery1.fields[2].value=edit2.text then 就可以了。
      

  4.   

    还是不对哟!
    我把adoquery1.fields[2].value=quotedstr(edit2.text)改为
    trim(adoquery1.fields[2].value)=trim(edit2.text)才对了
    但是我不知道为什么SQL SERVER数据库当设置了比如20个字符后我没有输入到20个字符,他会自动用空格给我补上.这是为什么?
      

  5.   

    adoquery1.sql.add('where names='+quotedstr(edit1.text));
    这句还有问题!
    如果你的userid字段有字符的话,在查询时SQL SERVER回返回错误!
      

  6.   

    你需要把数据库的字段类型改成varchar
      

  7.   

    我自己写的。能用!procedure TfLogin.bLoginClick(Sender: TObject);
    var
      aConn:TADOConnection;
      aQry:TADOQuery;
      sSql:string;
    begin
      if eName.Text = '' then
      begin
        ShowMessage('用户名未填写……');
        exit;
      end;
      aConn:= TADOConnection.Create(fLogin);
      aQry:= TADOQuery.Create(fLogin);
      try
      aConn.ConnectionString := '';
      aQry.SQL.Clear;
      aConn.ConnectionString :='Provider=SQLOLEDB.1;Persist Security Info=False;' +
                              'User ID=sa;Initial Catalog=registerdata;Data Source=Server';
      aConn.LoginPrompt := False;
      aConn.Connected := True;
      aQry.Connection := aConn;
      
      sSql:= 'select u.*,d.*,t.user_type_prority' +
            ' from userinfo u,Dict_Unit d,User_type t' +
            ' where u.AssociateFieldName = d.F_id and u.user_name = '''+ eName.Text +'''' +
            ' and u.user_type_id = t.id';  aQry.SQL.Text := sSql;
      aQry.Open;
      if not ( aQry.Eof and aQry.Bof )then
      begin
        //if (aQry.FieldByName('user_password').AsString=ePwd.Text) and (aQry.FieldByName('AssociateFieldName').AsInteger = 7 )then
        if (aQry.FieldByName('user_password').AsString=ePwd.Text) then
        begin
          if aQry.FieldByName('user_type_prority').AsInteger = 9996 then
          begin
            fLogin.Hide;
            Application.createForm(TfClient,fClient);
            fClient.iUserID := aQry.FieldByName('user_id').AsInteger;
            fClient.sUserName := aQry.FieldByName('user_name').AsString;
            fClient.iUnitId := aQry.FieldByName('AssociateFieldName').AsInteger;
            fClient.sUnitName := aQry.FieldByName('F_UnitName').AsString;
            fClient.iPlaceId := aQry.FieldByName('F_BelongPlace').AsInteger;
            fClient.showmodal;
            fClient.free;
            fLogin.Show;
          end;
          if aQry.FieldByName('user_type_prority').AsInteger = 9997 then
          begin
            fLogin.Hide;
            Application.createForm(TfManagment,fManagment);
            fManagment.eOperator.Tag := aQry.FieldByName('user_id').AsInteger;
            fManagment.eOperator.Text := aQry.FieldByName('user_name').AsString;
            fManagment.iUnitId := aQry.FieldByName('AssociateFieldName').AsInteger;
            fManagment.eUnitName.Tag :=aQry.FieldByName('AssociateFieldName').AsInteger;
            fManagment.sUnitName := aQry.FieldByName('F_UnitName').AsString;
            fManagment.eUnitName.Text := aQry.FieldByName('F_UnitName').AsString;
            fManagment.iPlaceId := aQry.FieldByName('F_BelongPlace').AsInteger;
            fManagment.iGroupId := aQry.fieldByName('User_group_id').AsInteger;
            fManagment.showmodal;
            fManagment.free;
            fLogin.Show;
          end;
        end
        else
        begin
          ShowMessage ('No this type nuser:' + eName.Text + ', or error password');
          aQry.Close;
        end;
      end
      else
        ShowMessage ('Query is empty');
      finally
        aConn.Close;
        eName.Text := '';
        ePwd.Text := '';
      end;
    end;
      

  8.   

    把字段类型 char  改成varchar 就不添空格了,
      

  9.   

    做查询时,用Paramaters参数形式比较好:
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add('select * from users where names=:names');
    adoquery1.Paramaters.ParamByName('names') := quotedstr(edit1.text);
    adoquery1.open;if adoquery1.RecordCount = 0 do
    begin
      messagedlg('请确认你输入的用户名是否正确',mtwarning,[mbok],0);
      adoquery1.Close;
      Exit; 
    end else
    if adoquery1.FiledByName('passwd').AsString <> edit2.text then
    begin
      messagedlg('密码错误',mtwarning,[mbok],0);
      adoquery1.Close;
      Exit;
    end;//验证通过
      

  10.   

    是char的问题,你改了就可以了...