diff --git a/fcl/db/bufdataset.inc b/fcl/db/bufdataset.inc index 91951b9ac8..828fc0a607 100644 --- a/fcl/db/bufdataset.inc +++ b/fcl/db/bufdataset.inc @@ -77,17 +77,28 @@ end; procedure TBufDataset.InternalClose; var pc : pchar; + r : integer; begin FOpen:=False; FCurrentRecBuf := FFirstRecBuf; - SetLength(FUpdateBuffer,0); while assigned(FCurrentRecBuf) do begin pc := pointer(FCurrentRecBuf); FCurrentRecBuf := FCurrentRecBuf^.next; FreeRecordBuffer(pc); end; + + if Length(FUpdateBuffer) > 0 then + begin + for r := 0 to length(FUpdateBuffer)-1 do with FUpdateBuffer[r] do + begin + if assigned(BookmarkData) then + FreeRecordBuffer(OldValuesBuffer); + end; + end; + SetLength(FUpdateBuffer,0); + FFirstRecBuf:= nil; SetLength(FFieldBufPositions,0); end; @@ -498,7 +509,6 @@ procedure TBufDataset.ApplyUpdates(MaxErrors: Integer); var SaveBookmark : pchar; r : Integer; FailedCount : integer; - EUpdErr : EUpdateError; Response : TResolverResponse; StoreRecBuf : PBufRecLinkItem; @@ -525,9 +535,8 @@ begin Inc(FailedCount); if failedcount > word(MaxErrors) then Response := rrAbort else Response := rrSkip; - EUpdErr := EUpdateError.Create(SOnUpdateError,E.Message,0,0,E); - if assigned(FOnUpdateError) then FOnUpdateError(Self,Self,EUpdErr,FUpdateBuffer[r].UpdateKind,Response) - else if Response = rrAbort then Raise EUpdErr + if assigned(FOnUpdateError) then FOnUpdateError(Self,Self,EUpdateError.Create(SOnUpdateError,E.Message,0,0,E),FUpdateBuffer[r].UpdateKind,Response) + else if Response = rrAbort then Raise EUpdateError.Create(SOnUpdateError,E.Message,0,0,E) end else raise;