rt,我在做mis时候,想做一个用户身份确认的登录窗口,就是输入用户名称和密码然后去interbase数据库取出数据验证用户身份,应该说是比较简单的代码,我也全部是按照网上的源代码敲的,可是程序运行时候,尽管我每次输入的用户名称和密码都是正确地,可是程序总说我得密码输入有错误,我想半天也想不通是怎么回事,希望高手帮我看看,解决问题后立即给分!!
我得数据库用的是interbase,其中的用户身份表有两个字段id,passwd,他们都是char型的,我用一个名称为ibt_user_pass的数据表组件连接该表,登录按钮代码如下,谁能看看哪里有问题,谢谢!!
try
   datamodu.IBD_SELECT.Connected:=true;
   ibt_user_pass.Filter :='ID='''+edit1.Text+'''';
   ibt_user_pass.Filtered :=true;
   ibt_user_pass.Active:=true;
   except
     application.MessageBox('请与系统管理员联系.','数据库连接错误',mb_ok);
     application.Terminate;
     end;
     if ibt_user_pass.RecordCount=1 then
       begin
         if ibt_user_pass.FieldByName('passwd').AsString=edit2.Text then
           
             
                  form_student_login.Hide
               
           
           else
           
           application.MessageBox('请确认密码是否正确!','密码不匹配',mb_ok);
            
           
       end       else application.MessageBox('请确认用户名是否正确!','无此用户',mb_ok);

解决方案 »

  1.   

    那跟踪一下,看一下ibt_user_pass.FieldByName('passwd').AsString 是否和输入到密码一样?
      

  2.   

    设置断点跟踪一下,看看你取得的密码究竟是什么?就是这里ibt_user_pass.FieldByName('passwd').AsString=edit2.Text看看是否区分大小写,取出的数据以及你输入的数据是否有空格可以这样试试trim(UpperCase(ibt_user_pass.FieldByName('passwd').AsString))=trim(UpperCase(edit2.Text))
    上面的UpperCase是将字符串都转换为大写,trim是去掉字符串中的空格
      

  3.   

    密码是允许存在空格的,楼上的trim会把空格去掉,甚至大小写不区分应该是字段char类型导致,char类型在长度不足的情况下会自动在后面补空格,所以密码才会不正确,建议用户名和密码都换其它数据类型
      

  4.   

    谢谢各位的建议,我用了一个label组建,用他显示得到的密码,发现和我输入的密码完全一样啊,我本人感觉wudi_1982(︻┳═一酒可千日不饮,但不可一饮不醉)
    stuwe(胜)两为大哥说的比较有说服力,用trim把ibt_user_pass.FieldByName('passwd').AsString 括起来以后和edit2的值旧一样了,程序也能顺利识别密码了,原来是char的类型造成的原因啊,可是如果密码可以使用空格的话,又该如何写代码呢??
      

  5.   

    将paswd的数据类型直接设置成Varchar就行了。如果用char可以限制密码不让其中有空格,不然没办反判断。
      

  6.   

    使用TRIM去掉空格,再比较。或者如何想严格一些,可以使用asci码来比较