Export

dron-sdron-s Россия
отредактировано 21:59 Раздел: FastReport 3.0
для экспорта делаю вот так
   
     frxReport.PrepareReport(true);
     frxReport.Export(RTFExp);
     frxReport.Free;
усё работает...
но если делать экспорт один раз... если нажать на батон ещё раз, то вылетает ошибка указывающая вот на эту строку в frxClass.pas
 FAllObjects.Clear;
я так понимая что класс экспорта уже создан и его надо освободить, сделать Free, но как это сделать никак не пойму...

Комментарии

  • gpigpi
    отредактировано February 2006
    Вот так работает:
    procedure TForm1.Button1Click(Sender: TObject);
    var frxReport: TfrxReport;
        Page: TfrxReportPage;
        frxRTFExport: TfrxRTFExport;
        Memo: TfrxMemoView;
    begin
         frxReport:=TfrxReport.Create(Form1);
         Page:=TfrxReportPage.Create(frxReport);
         frxRTFExport:=TfrxRTFExport.Create(Form1);
         Page.CreateUniqueName;
         Page.SetDefaults;
         Memo := TfrxMemoView.Create(Page);
         Memo.CreateUniqueName;
         Memo.Text := 'Hello, dron-s! :)';
         Memo.Height := 20;
         Memo.Width:= 150;
         frxReport.PrepareReport();
         frxReport.Export(frxRTFExport);
         frxReport.Free;
         frxRTFExport.Free;
    end;
    
    P.S. Ну как, разобрался с печатью брошюры?
  • dron-sdron-s Россия
    отредактировано 21:59
    Привет, gpi!!!!
    рад видеть тебя на форуме!!! ;)
    конечно работает, вот до этой строчки
    frxRTFExport.Free;
    
    я сам догадаться не мог ;)
  • dron-sdron-s Россия
    отредактировано 21:59
    блин, не работает, теперь вылетает на вот эту строчку..
       PreviewPages.Clear;
    
  • dron-sdron-s Россия
    отредактировано 21:59
    у меня есть ещё вот такое
    var
      NameRep:TfrxMemoView;
    ......
         NameRep := frxReport.FindObject('NameRep') as TfrxMemoView;
         NameRep.Text := cbRegion.Text;
    
    NameRep.Free; после этого вылетает на Access Violation to adreess....
    что делать то...
  • gpigpi
    отредактировано 21:59
    Покажи весь код
  • dron-sdron-s Россия
    отредактировано 21:59
    var
      NameRep:TfrxMemoView;
      BM:TBookMark;
    begin
     BM := Data.TRegion.GetBookmark;
    
         NameRep := frxReport.FindObject('NameRep') as TfrxMemoView;
         NameRep.Text := cbRegion.Text;
         Application.ProcessMessages;
         frxReport.PrepareReport(true);
         if Data.TRegion.BookmarkValid(bm) then
           Data.TRegion.GotoBookmark(bm);
         if Data.TRegion.BookmarkValid(bm) then
           Data.TRegion.FreeBookmark(bm);     
         frxReport.Export(RTFEx);
         frxReport.Free;
         RTFEx.Free;
         NameRep.free;
    
    вот...
  • gpigpi
    отредактировано 21:59
    А так?
    NameRep.free;
    frxReport.Free;
    RTFEx.Free;
    
  • dron-sdron-s Россия
    отредактировано 21:59
    так почему то сразу вылетает в Access violation...
    в чём может быть трабла?
  • dron-sdron-s Россия
    отредактировано 21:59
    что самое интересное на твоём примере всё работает нормально, а у меня вылетает... что за фигня такая...
  • dron-sdron-s Россия
    отредактировано 21:59
    что ещё, если экспортировать через предварительный просмотр, то всё нормально проходит... что я программно делаю не так...
  • gpigpi
    отредактировано 21:59
    Выкинь вообще NameRep.free; из кода. Я не досмотрел, что у тебя NameRep объявлена как локальная переменная
    var NameRep:TfrxMemoView;
  • dron-sdron-s Россия
    отредактировано 21:59
    gpi написал:
    Выкинь вообще NameRep.free; из кода. Я не досмотрел, что у тебя NameRep объявлена как локальная переменная
    var NameRep:TfrxMemoView;
    выкидывал, первый раз экспорт проходит нормально а потом выкидывает вот сюда
     FAllObjects.Clear;
    
    тоесть опять тоже самое что и было...
  • gpigpi
    отредактировано 21:59
    procedure TForm1.Button1Click(Sender: TObject);
    var frxReport: TfrxReport;
       Page: TfrxReportPage;
       frxXLSExport: TfrxXLSExport;
       Memo, NameRep: TfrxMemoView;
    begin
        frxReport:=TfrxReport.Create(Form1);
        Page:=TfrxReportPage.Create(frxReport);
        frxXLSExport:=TfrxXLSExport.Create(Form1);
        Page.CreateUniqueName;
        Page.SetDefaults;
        Memo := TfrxMemoView.Create(Page);
        Memo.CreateUniqueName;
        Memo.Text := 'Hello, dron-s! :)';
        Memo.Height := 20;
        Memo.Width:= 150;
        NameRep := frxReport.FindObject('Memo1') as TfrxMemoView;
        NameRep.Text := 'tttt';
        frxReport.PrepareReport();
        CoInitialize(nil);
        frxReport.Export(frxXLSExport);
        CoUnInitialize;
        frxReport.Free;
        frxXLSExport.Free;
    end;
    
    для вызова CoInitialize нужно добавить ActiveX в uses
    вот что нашёл
    написал:
    bdn.borland.com

    Article #29240: "CoInitialize has not been called" when using TXMLDocument

    Question:

    I have an application that uses the XML components. This application worked just fine until I decided to make it multi-threaded. Now I am getting a "CoInitialize has not been called" error when I try and use an XML component.

    Answer:

    Microsoft's XML parser, which the XML components use by default, is a COM-based parser, which means that COM needs to be initialized before you can use them. Delphi calls the CoInitialize function for you when an application starts up, but that function only initializes COM on the thread it was called from. You should put a call to CoInitialize at the beginning of your TThread descendant's Execute method and a matching CoUnInitialize at the end.
    У тебя, наверное, установлена D2005/2006 с Microsoft's XML parser?
    Попробуй вызывать CoInitialize(nil) перед экспортом. Я проверить не могу, во всяком случае никаких ошибок у меня этот код не выдаёт
  • dron-sdron-s Россия
    отредактировано 21:59
    написал:
    P.S. Ну как, разобрался с печатью брошюры?
    нет, вроде же сказали что фаст этого не умеет...
  • dron-sdron-s Россия
    отредактировано 21:59
    написал:
    У тебя, наверное, установлена D2005/2006 с Microsoft's XML parser?
    нет, я же говорю что снёс систему, сейчас стоит одна D7, проект надо здавть, некогда что либо ещё ставить...
  • gpigpi
    отредактировано 21:59
    написал:
    нет, вроде же сказали что фаст этого не умеет...
    посмотри здесь
    http://www.fast-report.com/ru/forum/index....t=0&#entry12374

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.