两种设计如下:////////////////////////////////////////////////////
设计一:procedure TForm1.BitBtn1Click(Sender: TObject);
beginwith adoquery1 do
begin
close;
sql.Clear;
sql.Text:='select 编号,数量 from atr order by 编号';
open;First;
checkbox1.enabled:=(FieldValues['数量']>0);
next;
checkbox2.enabled:=(FieldValues['数量']>0);
next;
checkbox3.enabled:=(FieldValues['数量']>0);
end;end;//////////////////////////////////////////////////////////
设计二:procedure TForm1.BitBtn1Click(Sender: TObject);
beginwith adoquery1 do
begin
close;
sql.Clear;
sql.Text:='select 编号,数量 from atr order by 编号';
open;First;
checkbox1.checked:=(FieldValues['数量']>0);
next;
checkbox2.checked:=(FieldValues['数量']>0);
next;
checkbox3.checked:=(FieldValues['数量']>0);
end;end;///////////////////////////////////////////////////////
一个是用enabled属性,一个是用checked属性。
都是布尔类型,但方法二总会出现“无法在关闭的数据集上执行该操作”错误提示。是什么原因导致这样的呢?

解决方案 »

  1.   

    为什么不用sql.add('')呢,再者First;
    checkbox1.checked:=(FieldValues['数量']>0);
    next;
    checkbox2.checked:=(FieldValues['数量']>0);
    next;
    checkbox3.checked:=(FieldValues['数量']>0);
    end;
    这些代码应该写到外面,而不是with的里面,再试吧
    也就是
    procedure TForm1.BitBtn1Click(Sender: TObject);
    beginwith adoquery1 do
    begin
    close;
    sql.Clear;
    sql.Text:='select 编号,数量 from atr order by 编号';
    open;
    end;
    First;
    checkbox1.checked:=(FieldValues['数量']>0);
    next;
    checkbox2.checked:=(FieldValues['数量']>0);
    next;
    checkbox3.checked:=(FieldValues['数量']>0);
    end;
      

  2.   

    用个中间变量试试:msign:=(FieldValues['数量']>0);
    checkbox1.checked:=msign;
    next;
    ...
      

  3.   

    我现在唯有这样
    checkbox2.enabled:=(FieldValues['数量']>0);
    checkbox2.checked:=checkbox2.enabled;
    哈~!
      

  4.   

    当checkbox.checked:=true时触发checkboxclick事件,而你的checkboxclick里有对dataset的操作.
      

  5.   

    To akwa
    是的,当click checkbox时我是对数据库操作的。
    你的话一击即中,谢谢!!