diff --git a/components/lazreport/source/lr_class.pas b/components/lazreport/source/lr_class.pas index c39ac60dbe..e5d536caf1 100644 --- a/components/lazreport/source/lr_class.pas +++ b/components/lazreport/source/lr_class.pas @@ -9851,7 +9851,7 @@ var min, max, avg, sum, count, d, v: Double; dk: (dkNone, dkSum, dkMin, dkMax, dkAvg, dkCount); vv, v2, v1: Variant; - BM : Pointer; + BM : TBookMark; {$IFDEF DebugLR} function FNoStr: string; begin diff --git a/components/lazreport/source/lr_dbset.pas b/components/lazreport/source/lr_dbset.pas index 27f8dc2a1b..ff1627f1c1 100644 --- a/components/lazreport/source/lr_dbset.pas +++ b/components/lazreport/source/lr_dbset.pas @@ -137,7 +137,7 @@ begin Result:=inherited GetBookMark; ds := DataSet; if Assigned(ds) then - Result:=ds.GetBookmark; + TBookMark(Result):=ds.GetBookmark; //increases refcount of bookmark end; procedure TfrDBDataSet.GotoBookMark(BM: Pointer); @@ -146,13 +146,16 @@ var begin ds := DataSet; if Assigned(ds) then - ds.GotoBookmark(BM); + ds.GotoBookmark(TBookMark(BM)); end; procedure TfrDBDataSet.FreeBookMark(BM: Pointer); var ds: TDataset; begin + {$IFNDEF noautomatedbookmark} + SetLength(TBookMark(BM),0); //decreases refcount of bookmark + {$ENDIF noautomatedbookmark} ds := DataSet; if Assigned(ds) and Assigned(BM) then ds.FreeBookmark(BM); diff --git a/components/lazreport/source/lr_vers.inc b/components/lazreport/source/lr_vers.inc index 8ae01f4050..4e6d983b35 100644 --- a/components/lazreport/source/lr_vers.inc +++ b/components/lazreport/source/lr_vers.inc @@ -55,3 +55,9 @@ {$ENDIF} {$ENDIF} {$DEFINE Delphi5} + +{$if FPC_FULLVERSION<20701} + // in former FCL versions TBookmark was a simple pointer + {$DEFINE noautomatedbookmark} +{$endif} +