-
cr@nk © (08.05.14 18:37) [0]Delphi 7
UniDAC 5.2.7
FR 4.15.6
БД Postresql 9.3procedure 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]Ну, для начала http://www.gunsmoker.ru/2009/05/access-violation.html
-
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 при уничтожении?
-
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
Не увидел ничего плохого в использовании данного варианта