我的目的是想清空某用户的密码,以★★★表示。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(.....) 也有问题,请各位大哥帮我看看。
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(.....) 也有问题,请各位大哥帮我看看。
改为
if atable.Fieldbyname['SUD_USED'].asstring = '0' then看看
这句时atable.Fieldvalues['SUD_USED'] 的值是什么。
和
if atable.Fieldbyname['SUD_USED'].asstring = '0' then作用是一样的。
和
if atable.Fieldbyname['SUD_USED'].asstring = '0' then
作用不一样,在字段为空时,上面一句值为NULL,下面一句值为''空字符串
建议先判断:
if atable.Locate('SUD_USERNAME;SUD_DWCODE',vararrayof([Combobox1.Text,combobox2.Text]),[loCaseInsensitive]) then
..........
locate('sud_used',combobox2.text,[])时出现问题,将焦点转移即可了,马上揭贴。