Browse Source

* Fix SetBufListSize

michael 6 years ago
parent
commit
3800875e45
1 changed files with 6 additions and 10 deletions
  1. 6 10
      packages/fcl-db/db.pas

+ 6 - 10
packages/fcl-db/db.pas

@@ -1084,6 +1084,7 @@ type
     FBeforeScroll: TDataSetNotifyEvent;
     FBeforeScroll: TDataSetNotifyEvent;
     FBlobFieldCount: Longint;
     FBlobFieldCount: Longint;
     FBuffers : TBuffers;
     FBuffers : TBuffers;
+    // The actual length of FBuffers is FBufferCount+1
     FBufferCount: Longint;
     FBufferCount: Longint;
     FConstraints: TCheckConstraints;
     FConstraints: TCheckConstraints;
     FDisableControlsCount : Integer;
     FDisableControlsCount : Integer;
@@ -1119,7 +1120,6 @@ type
     Procedure DoInsertAppend(DoAppend : Boolean);
     Procedure DoInsertAppend(DoAppend : Boolean);
     Procedure DoInternalOpen;
     Procedure DoInternalOpen;
     Function  GetBuffer (Index : longint) : TDataRecord;
     Function  GetBuffer (Index : longint) : TDataRecord;
-    function GetBufferCount: Longint;
     function GetDataProxy: TDataProxy;
     function GetDataProxy: TDataProxy;
     Procedure RegisterDataSource(ADataSource : TDataSource);
     Procedure RegisterDataSource(ADataSource : TDataSource);
     procedure SetConstraints(Value: TCheckConstraints);
     procedure SetConstraints(Value: TCheckConstraints);
@@ -1247,7 +1247,7 @@ type
     property CurrentRecord: Longint read FCurrentRecord;
     property CurrentRecord: Longint read FCurrentRecord;
     property BlobFieldCount: Longint read FBlobFieldCount;
     property BlobFieldCount: Longint read FBlobFieldCount;
     property Buffers[Index: Longint]: TDataRecord read GetBuffer;
     property Buffers[Index: Longint]: TDataRecord read GetBuffer;
-    property BufferCount: Longint read GetBufferCount;
+    property BufferCount: Longint read FBufferCount;
     property CalcBuffer: TDataRecord read FCalcBuffer;
     property CalcBuffer: TDataRecord read FCalcBuffer;
     property CalcFieldsCount: Longint read FCalcFieldsCount;
     property CalcFieldsCount: Longint read FCalcFieldsCount;
     property InternalCalcFields: Boolean read FInternalCalcFields;
     property InternalCalcFields: Boolean read FInternalCalcFields;
@@ -2776,11 +2776,6 @@ begin
   Result:=FBuffers[Index];
   Result:=FBuffers[Index];
 end;
 end;
 
 
-function TDataSet.GetBufferCount: Longint;
-begin
-  Result:=Length(FBuffers);
-end;
-
 function TDataSet.DoGetDataProxy: TDataProxy;
 function TDataSet.DoGetDataProxy: TDataProxy;
 
 
 begin
 begin
@@ -3636,12 +3631,13 @@ begin
   If Value=FBufferCount Then
   If Value=FBufferCount Then
     exit;
     exit;
   // Less buffers, shift buffers.
   // Less buffers, shift buffers.
-  if value>BufferCount then
+  if value>FBufferCount then
     begin
     begin
+    SetLength(FBuffers,Value+1); // FBuffers[FBufferCount] is used as a temp buffer
     For I:=FBufferCount to Value do
     For I:=FBufferCount to Value do
       FBuffers[i]:=AllocRecordBuffer;
       FBuffers[i]:=AllocRecordBuffer;
     end
     end
-  else if value<BufferCount then
+  else if value<FBufferCount then
     if (value>=0) and (FActiveRecord>Value-1) then
     if (value>=0) and (FActiveRecord>Value-1) then
       begin
       begin
       for i := 0 to (FActiveRecord-Value) do
       for i := 0 to (FActiveRecord-Value) do
@@ -4850,7 +4846,7 @@ begin
   TempBuf := FBuffers[0];
   TempBuf := FBuffers[0];
   For I:=1 to FBufferCount do
   For I:=1 to FBufferCount do
     FBuffers[I-1]:=FBuffers[i];
     FBuffers[I-1]:=FBuffers[i];
-  FBuffers[BufferCount]:=TempBuf;
+  FBuffers[FBufferCount]:=TempBuf;
 end;
 end;
 
 
 procedure TDataSet.ShiftBuffersForward;
 procedure TDataSet.ShiftBuffersForward;