想在一个页面显示时找到所有的dbedit根据组权限设置readonly. 如下代码:  case login.pass.fieldbyname('group').value of
      99:begin
           for i:= 1 to 20 do
             begin
               Tdbedit(findcomponent('dbedit'+inttostr(i))).ReadOnly :=false;
             end;
         end;但运行时总是报一个错:“acceess violation at address ...vcldb60.bpl"
结果有的dbedit是可写的,但也有不可写的。这是不是要先判断一下有没有找到该组件然后再设属性,  语句??

解决方案 »

  1.   

    表单上dbedit1~dbedit20是不是都有?
      

  2.   

    那当然不行了,如果是所有的dbedit可以这样判断:
      case login.pass.fieldbyname('group').value of
          99:begin
               for i:= 1 to ComponentCount do
                 if Components[i] is TDBEdit then
                 begin
                   Tdbedit(Components[i]).ReadOnly :=false;
                 end;
             end;
      

  3.   

    哦应该是从0开始:
      case login.pass.fieldbyname('group').value of
          99:begin
               for i:= 0 to ComponentCount-1 do
                 if Components[i] is TDBEdit then
                 begin
                   Tdbedit(Components[i]).ReadOnly :=false;
                 end;
             end;
      

  4.   

    谢了,findcomponent('dbedit'+inttostr(i)))这个值能不能判断一下存在不存在,如果存在就设属性readonly
      

  5.   

    也可以,
    var o: TComponent;
    o := findcomponent('dbedit'+inttostr(i)));
    if o <> nil then TDBEdit(o).ReadOnly := False;