问题在于提取出来的username和password都很有可能是null,或者一串空格。这样就出错了。

解决方案 »

  1.   

    fieldvalues['username']<  >  ''  这个条件不对吧你用fieldvalues['username'].asstring<  >  ''  试试
      

  2.   

    当搜索出的记录为空时,fieldvalues['username']的值为null,那么这个判断就成为了非法错误,最好加个判断是否为空的前提
    即使有记录满足搜索条件,password的值也可能为空,所以…………
      

  3.   

    加个not eof 吧,因为这样做只将第一个数据项进行操作.
      

  4.   

    用FieldByName('username').AsString吧,碰到null时,它自动帮你转换为'',不会报错。
      

  5.   

    with  adoquery1  do
              begin
                  close;
                  sql.clear;
                  sql.add('select  *  from  mydata');
                  open;
      
                  if  fieldvalues['username']<  >''  then
                      begin
                          button1.Caption  :=  fieldvalues['username'].asstring;
                          username  :=  fieldvalues['username'].asstring;
                          password  :=  fieldvalues['password'].asstring;
                      end;
              end;
      

  6.   

    with  adoquery1  do
              begin
                  close;
                  sql.clear;
                  sql.add('select  *  from  mydata');
                  open;
      
               配对的END没有。              if  adoquery1.fieldvalues['username']<  >  ''  then
                      begin
                          button1.Caption  :=  adoquery1.fieldvalues['username'].asstring;
                          username          :=  adoquery1.fieldvalues['username'];
                          password          :=  adoquery1.fieldvalues['password'];
                      end;
              end;
      

  7.   

    with adoquery1 do
      begin
        close;
        sql.clear;
        sql.add('select * from mydata');
        open;
        if not eof then
          begin
            if fieldvalues['username']<>null then
              begin
                button1.Caption:=fieldvalues['username'].asstring;
                username:=fieldvalues['username'].asstring;
                password:=fieldvalues['password'].asstring;
              end;
          end;
      end
    这样应该就没有问题了,或者不要用with直接把代码写出来,我是不喜欢用with容易出错!
      

  8.   

    with  adoquery1  do
    begin
      close;
      sql.clear;
      sql.add('select  *  from  mydata');
      open;
      if  not  eof  then
      begin
        if (Fieldbyname('username').Asstring<> nil) and (Fieldbyname('username').asstring<>'')  then
        begin
          button1.Caption:=Fieldbyname('name').Asstring;
          username:=Fieldbyname('username').Asstring;
          password:=Fieldbyname('password').Asstring;
        end;
      end;
    end
    nil 和'' 不一样最好都加上我建议你不要用FieldValues['name']
    如果要用就应该是with  adoquery1  do
    begin
      close;
      sql.clear;
      sql.add('select  *  from  mydata');
      open;  if  not  eof  then
      begin
        if (FieldValues['name']<> nil) and (FieldValues['name']<>'')  then
        begin
          button1.Caption:=FieldValues['name'];
          username:=FieldValues['username'];
          password:=FieldValues['password'];
        end;
      end;
    end
      

  9.   


      with    adoquery1    do
                          begin
                                  close;
                                  sql.clear;
                                  sql.add('select    *    from    mydata');
                                  open;
          
                                  if    fieldvalues['username']<      >  ''    then
                                          begin
                                                  button1.Caption    :=    fieldvalues['username'].asstring;
                                                  username    :=    fieldvalues['username'].asstring;
                                                  password    :=    fieldvalues['password'].asstring;
                                          end;
                          end; 
      

  10.   

    ADO有时在查询出空记录时会报错。
      

  11.   

    open;
    后面加上
    if recordcont=0 then exit;