with ADOReport do
  begin
    close;
    sql.text:='select *  from Ctl04000 where module_name='''+trim(self.Name)+'''';
    prepared;
    open;
    if eof then
    begin
      close;
      sql.text:='insert into Ctl04000 (module_name,Report_name) values ('''
      +trim(self.Name)+''','''+trim(self.caption)+''')';
      prepared;
      try
      execsql;
      except
        errMsg('保存报表失败!');
        Abort;                                          
      end;
    end;
  end;     with ADOReport do
  begin
    close;
    sql.text:='select module_name,Report_name,Report_Data from Ctl04000 where 
    module_name='''+trim(self.Name)+'''';
    prepared;
    open;
   end;  if not ADOReport.IsEmpty then
  begin
    if not(ADOReport.State in [dsedit,dsinsert]) then  ADOReport.Edit;
    frReport1.Filename:=trim(ADOReport.FieldByName('Report_name').AsString);
    frReport1.LoadFromBlobField(ADOReport.FieldByName('Report_Data'));
    frReport1.DesignReport;
  end; 上面是我调用报表设计器的原码,执行完frReport1.DesignReport 语句后出现"variant array index out of bounds"的提示。分不够在加。