I want to create a report generator on my system, thus allowing the user to customize the% of report%.
I need to save these reports in layout
so that it is accessible to all computers on the network.
(can not be shared folder)
banco de dados
or LoadFromFile
you are giving LoadFromStream
EAccessViolation and / or Invalid floating point operation
Code:
procedure TForm2.FormCreate(Sender: TObject);
begin
frxReport1.DesignReportInPanel(Panel1);
frxReport1.DataSets.Clear;
end;
{relatorio <-> arquivo}
procedure TForm2.LoadfromFile1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
frxReport1.Clear;
frxReport1.DataSets.Clear;
frxReport1.LoadFromFile(OpenDialog1.FileName);
frxReport1.Designer.Update;
frxReport1.Designer.UpdatePage;
frxReport1.Designer.UpdateControlState;
end;
end;
procedure TForm2.gravar1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
frxReport1.SaveToFile(SaveDialog1.FileName);
end;
{relatório <-> DB}
procedure TForm2.mniLoadfromDB1Click(Sender: TObject);
var
ms: TStringStream;
begin
if not ZConnection1.Connected then
ZConnection1.Connect;
sds1.Close;
sds1.Open;
sds2.Close;
sds2.ParamByName('id').AsInteger := sds1ID_GRELATORIO.AsInteger;
sds2.Open;
frxReport1.Clear;
pFinalizaDatasets;
//O Field report deve ser convertido para String pois o zeos retorna
// Blob como TWideMemoField o que causa erro se transferimos diretamente para stream
frxReport1.LoadFromStream(TStringStream.Create(sds1REPORT.AsString));
//frxReport1.DesignReportInPanel(Panel1);
//frxReport1.DataSets.Clear;
//sds2.First;
//while not sds2.Eof do
//begin
// pAddDataSet(sds2NOME.AsString,sds2COMANDO_SQL.AsString);
// sds2.Next;
//end;
frxReport1.Designer.Update;
frxReport1.Designer.UpdatePage;
frxReport1.Designer.UpdateControlState;
frxReport1.Designer.UpdateDataTree;
end;
procedure TForm2.pFinalizaDatasets;
var
I: Integer;
begin
for I := 0 to frxReport1.DataSets.Count - 1 do
begin
if Assigned(frxReport1.DataSets[i].DataSet)
and (TfrxDBDataset(frxReport1.DataSets[i].DataSet).DataSet is TZReadOnlyQuery )then
begin
TZReadOnlyQuery(TfrxDBDataset(frxReport1.DataSets[i].DataSet).DataSet).Close;
TfrxDBDataset(frxReport1.DataSets[i].DataSet).DataSet.Free;
TfrxDBDataset(frxReport1.DataSets[i].DataSet).Free;
end;
end;
frxReport1.DataSets.Clear;
end;
procedure TForm2.mnisavefromdb1Click(Sender: TObject);
var
ms: TMemoryStream;
I: Integer;
begin
if not ZConnection1.Connected then
ZConnection1.Connect;
sds1.Close;
sds1.Open;
sds2.Close;
sds2.Open;
ms := TMemoryStream.Create;
sds1.Insert;
sds1NOME.AsString := Text;
frxReport1.SaveToStream(ms);
ms.Position := 0;
sds1REPORT.LoadFromStream(ms);
sds1FK_CATEGORIA.AsInteger := 1;
sds1.Post;
for I := 0 to frxReport1.DataSets.Count - 1 do
begin
sds2.Insert;
sds2NOME.AsString := TfrxDBDataset(frxReport1.DataSets[i].DataSet).UserName;
sds2COMANDO_SQL.AsString :=
tzreadonlyquery(TfrxDBDataset(frxReport1.DataSets[i].DataSet).dataset).sql.text;
sds2FK_GRELATORIO.AsInteger := sds1ID_GRELATORIO.AsInteger;
sds2.Post;
end;
ms.Free;
end;
FastReport function that raises exception:
function TfrxPaperXProperty.GetValue: String;
var
e: Extended;
begin
e := GetFloatValue;
case TfrxDesignerForm(Designer).Units of
duCM: e := e / 10;
duInches: e := e / 25.4;
duPixels: e := e * 96 / 25.4;
duChars: e := e * 96 / 25.4 / FRatio;
end;
if e = Int(e) then
Result := FloatToStr(e) else
Result := Format('%f', [e]);
end;
madException Report:
registered owner : infra / Microsoft
operating system : Windows 7 x64 Service Pack 1 build 7601
system language : Portuguese
system up time : 6 days 3 hours
program up time : 3 seconds
processors : 4x Intel(R) Core(TM) i5-4440S CPU @ 2.80GHz
physical memory : 4176/8109 MB (free/total)
free disk space : (C:) 610,11 GB
display mode : 1440x900, 32 bit
process id : $1b38
allocated memory : 71,96 MB
largest free block : 1,08 GB
executable : prjTeste.exe
exec. date/time : 2015-12-24 11:35
compiled with : Delphi 2009
madExcept version : 4.0.12
callstack crc : $0134efd3, $cd3301a9, $cd3301a9
exception number : 1
exception class : EAccessViolation
exception message : Access violation at address 005DBDDF in module 'prjTeste.exe'. Read of address 0000003C.
main thread ($1538):
005dbddf +02b prjTeste.exe frxClass 4629 +8 TfrxComponent.GetReport
00627b07 +01b prjTeste.exe frxDesgnEditors 891 +2 TfrxDataSetProperty.GetValue
005fe3dd +019 prjTeste.exe frxInsp 486 +1 TfrxObjectInspector.GetValue
005ff5ae +0f6 prjTeste.exe frxInsp 958 +24 TfrxObjectInspector.PBMouseMove
00511891 +025 prjTeste.exe Controls TControl.MouseMove
0051190e +06e prjTeste.exe Controls TControl.WMMouseMove
00511012 +2d2 prjTeste.exe Controls TControl.WndProc
00510c38 +024 prjTeste.exe Controls TControl.Perform
00514d2a +0ae prjTeste.exe Controls GetControlAtPos
00514df2 +0a6 prjTeste.exe Controls TWinControl.ControlAtPos
00510c38 +024 prjTeste.exe Controls TControl.Perform
00514ea7 +097 prjTeste.exe Controls TWinControl.IsControlMouseMsg
005153c2 +3be prjTeste.exe Controls TWinControl.WndProc
00514c30 +02c prjTeste.exe Controls TWinControl.MainWndProc
00499300 +014 prjTeste.exe Classes StdWndProc
76ea7895 +00a USER32.dll DispatchMessageW
0053351d +11d prjTeste.exe Forms TApplication.ProcessMessage
00533562 +00a prjTeste.exe Forms TApplication.HandleMessage
0053388d +0c9 prjTeste.exe Forms TApplication.Run
00797531 +049 prjTeste.exe prjTeste 18 +4 initialization
76553378 +010 kernel32.dll BaseThreadInitThunk
--------------------------------------------------------------------------
registered owner : infra / Microsoft
operating system : Windows 7 x64 Service Pack 1 build 7601
system language : Portuguese
system up time : 6 days 3 hours
program up time : 12 seconds
processors : 4x Intel(R) Core(TM) i5-4440S CPU @ 2.80GHz
physical memory : 4123/8109 MB (free/total)
free disk space : (C:) 610,11 GB
display mode : 1440x900, 32 bit
process id : $2344
allocated memory : 86,75 MB
largest free block : 805,31 MB
executable : prjTeste.exe
exec. date/time : 2015-12-24 11:35
compiled with : Delphi 2009
madExcept version : 4.0.12
callstack crc : $2f0c432c, $4c6dd36f, $4c6dd36f
exception number : 1
exception class : EAccessViolation
exception message : Access violation at address 006279C1 in module 'prjTeste.exe'. Read of address 6E04ECC6.
main thread ($2008):
006279c1 +00d prjTeste.exe frxDesgnEditors 845 +2 TfrxPictureProperty.GetValue
005fe3dd +019 prjTeste.exe frxInsp 486 +1 TfrxObjectInspector.GetValue
005ff5ae +0f6 prjTeste.exe frxInsp 958 +24 TfrxObjectInspector.PBMouseMove
00511891 +025 prjTeste.exe Controls TControl.MouseMove
0051190e +06e prjTeste.exe Controls TControl.WMMouseMove
00511012 +2d2 prjTeste.exe Controls TControl.WndProc
00510c38 +024 prjTeste.exe Controls TControl.Perform
00514d2a +0ae prjTeste.exe Controls GetControlAtPos
00514df2 +0a6 prjTeste.exe Controls TWinControl.ControlAtPos
00510c38 +024 prjTeste.exe Controls TControl.Perform
00514ea7 +097 prjTeste.exe Controls TWinControl.IsControlMouseMsg
005153c2 +3be prjTeste.exe Controls TWinControl.WndProc
00514c30 +02c prjTeste.exe Controls TWinControl.MainWndProc
00499300 +014 prjTeste.exe Classes StdWndProc
76ea7895 +00a USER32.dll DispatchMessageW
0053351d +11d prjTeste.exe Forms TApplication.ProcessMessage
00533562 +00a prjTeste.exe Forms TApplication.HandleMessage
0053388d +0c9 prjTeste.exe Forms TApplication.Run
00797531 +049 prjTeste.exe prjTeste 18 +4 initialization
76553378 +010 kernel32.dll BaseThreadInitThunk