我的目的是想清空某用户的密码,以★★★表示。combobox1\combobox2是代表两个项,一个表示部门、一个表示用户。源码如下:
procedure Tclearpass.mbokClick(Sender: TObject);
begin
  atable.Open;
  atable.Locate('SUD_USERNAME;SUD_DWCODE',vararrayof([Combobox1.Text,combobox2.Text]),[loCaseInsensitive]);
    if atable.Fieldvalues['SUD_USED'] = '0' THEN    //这里的判断条件没有效
    begin
     if messagedlg('确认清空用户:'+combobox2.Text+ ' 的密码吗?',mtconfirmation,[mbyes,mbno],0)=mryes then
      begin
        atable.Edit;
        Atable.fieldvalues['SUD_USERPWD']:= '★★★';
        atable.Post;
        atable.Refresh;
        showmessage('密码已清空!');
        //ShowMessage(aTable.FieldByName('SUD_USERPWD').AsString);
      end    end
    else
    begin
      showmessage('此用户已登录,不能清除该用户的密码');
      exit;
    end;
end;
我跟踪它的执行过程时发现,if atable.Fieldvalues['SUD_USED'] = '0' THEN 没有作用,我估计atable.locate(.....) 也有问题,请各位大哥帮我看看。

解决方案 »

  1.   

    if atable.FieldByName('SUD_USED').AsString = '0' THEN
      

  2.   

    if atable.FieldByName('SUD_USED').AsString = '0' THEN
      

  3.   

    if atable.Fieldvalues['SUD_USED'] = '0' 
    改为
    if atable.Fieldbyname['SUD_USED'].asstring = '0' then看看
      

  4.   

    你跟踪一下执行到if atable.Fieldvalues['SUD_USED'] = '0' THEN 
    这句时atable.Fieldvalues['SUD_USED'] 的值是什么。
      

  5.   

    if atable.Fieldvalues['SUD_USED'] = '0' 

    if atable.Fieldbyname['SUD_USED'].asstring = '0' then作用是一样的。
      

  6.   

    if atable.Fieldvalues['SUD_USED'] = '0' 

    if atable.Fieldbyname['SUD_USED'].asstring = '0' then
    作用不一样,在字段为空时,上面一句值为NULL,下面一句值为''空字符串
    建议先判断:
    if atable.Locate('SUD_USERNAME;SUD_DWCODE',vararrayof([Combobox1.Text,combobox2.Text]),[loCaseInsensitive]) then
    ..........
      

  7.   

    在字段‘SUD_USED'中的值全部为0
      

  8.   

    把你的编译器优化关掉!Delphi编译器优化可能忽略某些语句,造成混乱!
      

  9.   

    我跟踪了,发现是atable.locate(...)的问题,根本没定位到要更改的记录。看看locate该怎么写才能定位到记录。
      

  10.   

    问题解决了,谢谢各位大哥,还是locate的问题。当combobox2获得焦点是在用
    locate('sud_used',combobox2.text,[])时出现问题,将焦点转移即可了,马上揭贴。