Browse Source

* Implemented TBufDataset.Packetrecord

git-svn-id: trunk@2842 -
joost 19 years ago
parent
commit
5f801f2b42
3 changed files with 25 additions and 18 deletions
  1. 21 18
      fcl/db/bufdataset.inc
  2. 3 0
      fcl/db/db.pp
  3. 1 0
      fcl/db/dbconst.pp

+ 21 - 18
fcl/db/bufdataset.inc

@@ -23,10 +23,16 @@ begin
   Inherited Create(AOwner);
   Inherited Create(AOwner);
   SetLength(FUpdateBuffer,0);
   SetLength(FUpdateBuffer,0);
   BookmarkSize := sizeof(TBufBookmark);
   BookmarkSize := sizeof(TBufBookmark);
-// temporary set it here
   FPacketRecords := 10;
   FPacketRecords := 10;
 end;
 end;
 
 
+procedure TBufDataset.SetPacketRecords(aValue : integer);
+
+begin
+  if aValue > 0 then FPacketRecords := aValue
+    else DatabaseError(SInvPacketRecordsValue);
+end;
+
 destructor TBufDataset.Destroy;
 destructor TBufDataset.Destroy;
 
 
 begin
 begin
@@ -295,26 +301,23 @@ var i : integer;
 
 
 begin
 begin
   i := 0;
   i := 0;
-  if FPacketRecords > 0 then
+  if FBBufferCount < FBRecordCount+FPacketRecords then
     begin
     begin
-    if FBBufferCount < FBRecordCount+FPacketRecords then
-      begin
-      FBBufferCount := FBBuffercount + FPacketRecords;
-      ReAllocMem(FBBuffers,FBBuffercount*SizeOf(PChar));
-      end;
+    FBBufferCount := FBBuffercount + FPacketRecords;
+    ReAllocMem(FBBuffers,FBBuffercount*SizeOf(PChar));
+    end;
 
 
-    repeat
-    FBBuffers[FBRecordCount+i] := AllocRecordBuffer;
-    b := (loadbuffer(FBBuffers[FBRecordCount+i])<>grOk);
-    inc(i);
-    until (i = FPacketRecords) or b;
-    if b then
-      begin
-      dec(i);
-      FreeRecordBuffer(FBBuffers[FBRecordCount+i]);
-      end;
-    FBRecordCount := FBRecordCount + i;
+  repeat
+  FBBuffers[FBRecordCount+i] := AllocRecordBuffer;
+  b := (loadbuffer(FBBuffers[FBRecordCount+i])<>grOk);
+  inc(i);
+  until (i = FPacketRecords) or b;
+  if b then
+    begin
+    dec(i);
+    FreeRecordBuffer(FBBuffers[FBRecordCount+i]);
     end;
     end;
+  FBRecordCount := FBRecordCount + i;
   result := i;
   result := i;
 end;
 end;
 
 

+ 3 - 0
fcl/db/db.pp

@@ -1515,6 +1515,7 @@ type
     function GetFieldSize(FieldDef : TFieldDef) : longint;
     function GetFieldSize(FieldDef : TFieldDef) : longint;
     function GetRecordUpdateBuffer(rno : integer;var RecUpdBuf : PRecUpdateBuffer) : boolean;
     function GetRecordUpdateBuffer(rno : integer;var RecUpdBuf : PRecUpdateBuffer) : boolean;
     function GetFieldUpdateBuffer(fieldno : integer;RecUpdBuf : PRecUpdateBuffer;var FieldUpdBuf : pFieldUpdateBuffer) : boolean;
     function GetFieldUpdateBuffer(fieldno : integer;RecUpdBuf : PRecUpdateBuffer;var FieldUpdBuf : pFieldUpdateBuffer) : boolean;
+    procedure SetPacketRecords(aValue : integer);
   protected
   protected
     procedure SetRecNo(Value: Longint); override;
     procedure SetRecNo(Value: Longint); override;
     function  GetRecNo: Longint; override;
     function  GetRecNo: Longint; override;
@@ -1557,6 +1558,8 @@ type
     procedure ApplyUpdates; virtual;
     procedure ApplyUpdates; virtual;
     procedure CancelUpdates; virtual;
     procedure CancelUpdates; virtual;
     destructor Destroy; override;
     destructor Destroy; override;
+  published
+    property PacketRecords : Integer read FPacketRecords write FPacketRecords default 10;
   end;
   end;
 
 
   { TParam }
   { TParam }

+ 1 - 0
fcl/db/dbconst.pp

@@ -75,6 +75,7 @@ Const
   SNoParseSQL              = '%s is only possible if ParseSQL is True';
   SNoParseSQL              = '%s is only possible if ParseSQL is True';
   SLookupInfoError         = 'Lookup information for field ''%s'' is incomplete';
   SLookupInfoError         = 'Lookup information for field ''%s'' is incomplete';
   SUnsupportedFieldType    = 'Fieldtype %s is not supported';
   SUnsupportedFieldType    = 'Fieldtype %s is not supported';
+  SInvPacketRecordsValue   = 'PacketRecords has to be larger then 0';
 
 
 Implementation
 Implementation