FORM里有25个CHECKBOX,一个BUTTON,现要进行判断这15个CHECKBOX中是否为选中状态,是则向数据库中插入CHECKBOX.caption,请高手们指导下,谢谢!
以下是我的代码,编译没出错,运行出错了,麻烦帮我看看哪错了,谢谢!
procedure Tuserrights.BitBtn1Click(Sender: TObject);
var i:integer;
begin
   for i:=1 to 25 do
     begin
     if (TCheckbox(user.FindComponent('Checkbox'+inttostr(i))).Checked) then
       begin
         Adoquery1.SQL.Text:='insert into user_czrights(user_id,user_name,user_cz_rights) values (:id,:name,:czrights)';
         Adoquery1.Parameters.ParamByName('id').Value:=Edit1.Text;
         Adoquery1.Parameters.ParamByName('name').Value:=Edit2.Text;
         Adoquery1.Parameters.ParamByName('czrights').Value:=Tcheckbox(user.FindComponent('checkbox'+inttostr(i))).Caption;
         Adoquery1.ExecSQL;
         messagebox(handle,'用户权限设置成功!','系统提示',mb_ok);
       end;
     end;
end;

解决方案 »

  1.   

    什么错误提示啊,可能因为你的FindComponent,没找到组件
      

  2.   

    Project ERP.exe raised exception class EAccessViolation with message 'Access violation at address 004B6C7E in module 'ERP.exe'. Read of address 00000000'. Process
    stopped Use Step or Run to continue.
    这是错误提示,
      

  3.   

    TCheckbox(user.FindComponent('Checkbox'+inttostr(i))).Checked
    确认 checkbox1 到checkbox25 之间的 checkbox都存在 你可以单步跟踪下 出错的是那条语句!
      

  4.   

    请问这论坛能上传图片吗?我可以截图出来。1-25的CHECKBOX都是存在的。
    TCheckbox(user.FindComponent('Checkbox'+inttostr(i))).Checked  这条语句是做判断该CHECKBOX是否为选中状态,应该是这样没错吧?
      

  5.   

    你最好把FindComponent单独写一个函数,来返回组件,那样好调试
      

  6.   

    你的user.FindComponent中user是什么东西,如果user不是当前窗体,那你可能就真找不到啊,或者user本身访问就出错了自己写个函数,把FindComponent放到里面,并判断是否找到
      

  7.   

    user是当前窗体。窗体上放了25个CHECKBOX,是做权限设置用的。现在就是要判断CHECKBOX是否为选中状态,是的话,就把该CHECKBOX对应的CAPTION插入数据库中。至于你说的写函数判断FindComponet放到里面,这个我不太会。
      

  8.   

    用IS , AS,你窗体叫userrights吧?
    procedure Tuserrights.BitBtn1Click(Sender: TObject);
    var i:integer;
    begin
      for i:=0 to userrights.ControlCount-1 do
      begin
       if (userrights.Controls[i] is TCheckbox) and (userrights.Controls[i] as TCheckbox).checked then
       begin
      Adoquery1.SQL.Text:='insert into user_czrights(user_id,user_name,user_cz_rights) values (:id,:name,:czrights)';
      Adoquery1.Parameters.ParamByName('id').Value:=Edit1.Text;
      Adoquery1.Parameters.ParamByName('name').Value:=Edit2.Text;
      Adoquery1.Parameters.ParamByName('czrights').Value:=(userrights.Controls[i] as TCheckbox).Caption;
      Adoquery1.ExecSQL;
      messagebox(handle,'用户权限设置成功!','系统提示',mb_ok);
      end;
      end;
    end;