在做一个权限管理的模块:用注释的判断语句,checkbox1的checked始终是true. 
 跟他们的fielbyname fieldvalues类型是否有关,(它们都为string) 跟踪了,到CheckBox1.Checked:=true 其值为 false? if  ADOQuery2.FieldByName('用户编号').AsString <>'' then  
    //ADOQuery2.FieldValues['用户编号'] <>'' then  
    CheckBox1.Checked:=true 
 else 
    checkbox1.Checked:=False; 
 end; 
部分代码如下:  With ADOQuery2_LBsh do
 begin
   close;
   sql.Clear;
   sql.Add('select 用户编号 from QX where (用户编号=(select 用户编号 from QXYH where 姓名='''+combobox1.Text+''' )) and (权限名称='''+CheckBox1.caption+''')');
   open;
   if FieldByName('用户编号').AsString<>'' then    FieldValues
      CheckBox1.Checked:=true
   else
      CheckBox1.Checked:=false;

解决方案 »

  1.   

      FieldValues[] variant ,是将字段数组中的值以名称方式直接取出,这种方法很方便,而且对取值不用做转换,但是这也是比较容易出错的,比如你的选择中有一条记录中的这个字段是空值时,而对应于取出的数据将无法自动进行转换,从而出现一个异常,使程序中断   
        
      FieldByName() TField ,虽然比较烦,但是在字段比较多,而且又有可能出现空值的情况下使用是最好的,在使用时这个方法时,必须指定所返回的值为何类型,如AsString、AsInteger等,这样的类型转换可以将空值转换成长度为的0字符串或数据为0的数字型值   
      

  2.   

    if  Trim(ADOQuery2.FieldByName('用户编号').AsString)  <>'' then   
        //ADOQuery2.FieldValues['用户编号']  <>'' then   
        CheckBox1.Checked:=true  
     else  
        checkbox1.Checked:=False;  
     end;  
    用ADOQuery2.FieldByName('用户编号').AsString吧,要好一些,如果是NULL也会返回空串
      

  3.   

    FieldByName().AsString,字段为空时不会出错的
      

  4.   

    FieldValues[] 直接显示值
    FieldByName() 会转化查询的值,会把空格去掉