Конференция "Базы" » При закрытии программы AV при использовании FastReport [D7, Postgresql 9.3]
 
  • cr@nk © (08.05.14 18:37) [0]
    Delphi 7
    UniDAC 5.2.7
    FR 4.15.6
    БД Postresql 9.3
    procedure TfmMain.cxButton1Click(Sender: TObject);
    var
     UniDACQuery: TfrxUniDACQuery;
    begin
     UniDACQuery := DMMain.repCardPersonnel.FindObject('UniDACQuery') as TfrxUniDACQuery;
     UniDACQuery.ParamByName('ID').Value := DMMain.utPersonnel.FieldByName('id_personnel').AsInteger;
     DMMain.repCardPersonnel.PrepareReport;
     DMMain.repCardPersonnel.ShowPreparedReport;
    end;


    Вот в таком варианте отчёт показывается, я его закрываю. Всё ОК
    Но как только я закрываю программу, то сразу получаю

    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Personnel.exe raised exception class EAccessViolation with message 'Access violation at address 03634632. Read of address 00000033'. Process stopped. Use Step or Run to continue.
    ---------------------------
    OK   Help    
    ---------------------------



    Если сам по себе отчёт не вызывать, то программа закроется нормально
  • turbouser © (08.05.14 20:57) [1]

    > var
    >  UniDACQuery: TfrxUniDACQuery;
    > begin
    >  UniDACQuery := DMMain.repCardPersonnel.FindObject('UniDACQuery')
    > as TfrxUniDACQuery;

    Это зачем? Что мешает почитать документацию и параметры передавать через frxReport.OnGetValue ?
  • cr@nk © (08.05.14 21:20) [2]
    Это от незнания всех возможностей. В документации приводился этот вариант.
    Как показала практика, ошибка будет возникать даже, если написано только это
    DMMain.repCardPersonnel.PrepareReport;
    DMMain.repCardPersonnel.ShowPreparedReport;

    Ошибка при закрытии программы
  • turbouser © (08.05.14 21:23) [3]
  • turbouser © (08.05.14 21:31) [4]
    посмотри при крахе проги (под дебагом, естественно, use debug dcu и полный билд проекта, если до этого в Relese был) в Search -> Goto Address -> 03634632 (ну, или какой будет в AV)
  • cr@nk © (08.05.14 21:37) [5]
    Да, этой ссылкой уже поделились на другом форуме :)

    В CallStack отсылает на строчку
    Application.CreateForm(TDMMain, DMMain);

    А в Ассемблере пишет
    00423938  call    dword ptr [edx+$0C]          ; <-- EXCEPTION

    Ничего полезного для себя я увидеть не смог :(
  • turbouser © (08.05.14 21:39) [6]
    и что там происходит в DMMain при уничтожении?
  • Inovet © (08.05.14 21:54) [7]
    DMMain уничтожается раньше fmMain?
  • cr@nk © (08.05.14 22:42) [8]
    Нет. В проекте автоматически создаётся только DMMain
    Всё остальное создаю программно. В других проектах так делал и всё было нормально
    Тут всё упирается именно FastReport
  • cr@nk © (10.05.14 00:25) [9]

    > Что мешает почитать документацию и параметры передавать
    > через frxReport.OnGetValue

    Посмотрел документацию. Я так понял, что данные способ передачи переменных не подходит для передачи параметров в существующий в отчёте SQL-запрос
  • turbouser © (10.05.14 10:03) [10]

    > cr@nk ©   (10.05.14 00:25) [9]


    > Посмотрел документацию

    так это же самое главное :)

    > данные способ передачи переменных не подходит

    угу, а как насечет frxReport.Variables[] ?
  • cr@nk © (10.05.14 14:19) [11]
    Я пробовал сделать по этому мануалу: http://www.fast-report.com/public_download/html/ProgMan-ru/index.html?20.htm
    Именно таки образом в SQL_запрос подставить не смог. Поэтому оставил через FindObject
    Не увидел ничего плохого в использовании данного варианта
 
Конференция "Базы" » При закрытии программы AV при использовании FastReport [D7, Postgresql 9.3]
Есть новые Нет новых   [118653   +10][b:0][p:0.001]