Browse Source

fcl-db: datapacketreader: change of interface methods. Pass reference to TCustomBufDataset only once in constructor of TDatapacketReader, so instance of datapacketreader will know about BufDataset for which it was created and there is no need to pass this reference on "every" call to methods of TDataPacketReader. It brings simplicity and more flexibility IMHO.
DO NOT BACKPORT THIS TO 2.6.3

git-svn-id: trunk@25542 -

lacak 12 years ago
parent
commit
7842e9f823

+ 44 - 41
packages/fcl-db/src/base/bufdataset.pas

@@ -350,15 +350,17 @@ type
   TDatapacketReaderClass = class of TDatapacketReader;
   TDatapacketReaderClass = class of TDatapacketReader;
   TDataPacketReader = class(TObject)
   TDataPacketReader = class(TObject)
     FStream : TStream;
     FStream : TStream;
+    FDataSet: TCustomBufDataset;
   protected
   protected
     class function RowStateToByte(const ARowState : TRowState) : byte;
     class function RowStateToByte(const ARowState : TRowState) : byte;
     class function ByteToRowState(const AByte : Byte) : TRowState;
     class function ByteToRowState(const AByte : Byte) : TRowState;
-    class procedure RestoreBlobField(ADataset: TCustomBufDataset; AField: TField; ASource: pointer; ASize: integer);
+    procedure RestoreBlobField(AField: TField; ASource: pointer; ASize: integer);
+    property DataSet: TCustomBufDataset read FDataSet;
   public
   public
-    constructor create(AStream : TStream); virtual;
+    constructor Create(ADataSet: TCustomBufDataset; AStream : TStream); virtual;
     // Load a dataset from stream:
     // Load a dataset from stream:
     // Load the field definitions from a stream.
     // Load the field definitions from a stream.
-    procedure LoadFieldDefs(AFieldDefs : TFieldDefs; var AnAutoIncValue : integer); virtual; abstract;
+    procedure LoadFieldDefs(var AnAutoIncValue : integer); virtual; abstract;
     // Is called before the records are loaded
     // Is called before the records are loaded
     procedure InitLoadRecords; virtual; abstract;
     procedure InitLoadRecords; virtual; abstract;
     // Returns if there is at least one more record available in the stream
     // Returns if there is at least one more record available in the stream
@@ -366,15 +368,15 @@ type
     // Return the RowState of the current record, and the order of the update
     // Return the RowState of the current record, and the order of the update
     function GetRecordRowState(out AUpdOrder : Integer) : TRowState; virtual; abstract;
     function GetRecordRowState(out AUpdOrder : Integer) : TRowState; virtual; abstract;
     // Store a record from stream in the current record buffer
     // Store a record from stream in the current record buffer
-    procedure RestoreRecord(ADataset : TCustomBufDataset); virtual; abstract;
+    procedure RestoreRecord; virtual; abstract;
     // Move the stream to the next record
     // Move the stream to the next record
     procedure GotoNextRecord; virtual; abstract;
     procedure GotoNextRecord; virtual; abstract;
 
 
     // Store a dataset to stream:
     // Store a dataset to stream:
     // Save the field definitions to a stream.
     // Save the field definitions to a stream.
-    procedure StoreFieldDefs(AFieldDefs : TFieldDefs; AnAutoIncValue : integer); virtual; abstract;
+    procedure StoreFieldDefs(AnAutoIncValue : integer); virtual; abstract;
     // Save a record from the current record buffer to the stream
     // Save a record from the current record buffer to the stream
-    procedure StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); virtual; abstract;
+    procedure StoreRecord(ARowState : TRowState; AUpdOrder : integer = 0); virtual; abstract;
     // Is called after all records are stored
     // Is called after all records are stored
     procedure FinalizeStoreRecords; virtual; abstract;
     procedure FinalizeStoreRecords; virtual; abstract;
     // Checks if the provided stream is of the right format for this class
     // Checks if the provided stream is of the right format for this class
@@ -417,15 +419,15 @@ type
     var
     var
       FVersion: byte;
       FVersion: byte;
   public
   public
-    constructor Create(AStream : TStream); override;
-    procedure LoadFieldDefs(AFieldDefs : TFieldDefs; var AnAutoIncValue : integer); override;
-    procedure StoreFieldDefs(AFieldDefs : TFieldDefs; AnAutoIncValue : integer); override;
+    constructor Create(ADataSet: TCustomBufDataset; AStream : TStream); override;
+    procedure LoadFieldDefs(var AnAutoIncValue : integer); override;
+    procedure StoreFieldDefs(AnAutoIncValue : integer); override;
     procedure InitLoadRecords; override;
     procedure InitLoadRecords; override;
     function GetCurrentRecord : boolean; override;
     function GetCurrentRecord : boolean; override;
     function GetRecordRowState(out AUpdOrder : Integer) : TRowState; override;
     function GetRecordRowState(out AUpdOrder : Integer) : TRowState; override;
-    procedure RestoreRecord(ADataset : TCustomBufDataset); override;
+    procedure RestoreRecord; override;
     procedure GotoNextRecord; override;
     procedure GotoNextRecord; override;
-    procedure StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); override;
+    procedure StoreRecord(ARowState : TRowState; AUpdOrder : integer = 0); override;
     procedure FinalizeStoreRecords; override;
     procedure FinalizeStoreRecords; override;
     class function RecognizeStream(AStream : TStream) : boolean; override;
     class function RecognizeStream(AStream : TStream) : boolean; override;
   end;
   end;
@@ -2485,11 +2487,11 @@ var APacketReader: TDataPacketReader;
 
 
 begin
 begin
   if GetRegisterDatapacketReader(AStream, format, APacketReaderReg) then
   if GetRegisterDatapacketReader(AStream, format, APacketReaderReg) then
-    APacketReader := APacketReaderReg.ReaderClass.create(AStream)
+    APacketReader := APacketReaderReg.ReaderClass.Create(Self, AStream)
   else if TFpcBinaryDatapacketReader.RecognizeStream(AStream) then
   else if TFpcBinaryDatapacketReader.RecognizeStream(AStream) then
     begin
     begin
     AStream.Seek(0, soFromBeginning);
     AStream.Seek(0, soFromBeginning);
-    APacketReader := TFpcBinaryDatapacketReader.create(AStream)
+    APacketReader := TFpcBinaryDatapacketReader.Create(Self, AStream)
     end
     end
   else
   else
     DatabaseError(SStreamNotRecognised);
     DatabaseError(SStreamNotRecognised);
@@ -2761,7 +2763,7 @@ procedure TCustomBufDataset.GetDatasetPacket(AWriter: TDataPacketReader);
     FFilterBuffer:=AUpdBuffer.OldValuesBuffer;
     FFilterBuffer:=AUpdBuffer.OldValuesBuffer;
     // OldValuesBuffer is nil if the record is either inserted or inserted and then deleted
     // OldValuesBuffer is nil if the record is either inserted or inserted and then deleted
     if assigned(FFilterBuffer) then
     if assigned(FFilterBuffer) then
-      FDatasetReader.StoreRecord(Self,AThisRowState,FCurrentUpdateBuffer);
+      FDatasetReader.StoreRecord(AThisRowState,FCurrentUpdateBuffer);
   end;
   end;
 
 
   procedure HandleUpdateBuffersFromRecord(AFirstCall : boolean;ARecBookmark : TBufBookmark; var ARowState: TRowState);
   procedure HandleUpdateBuffersFromRecord(AFirstCall : boolean;ARecBookmark : TBufBookmark; var ARowState: TRowState);
@@ -2798,7 +2800,7 @@ begin
   try
   try
     //  CheckActive;
     //  CheckActive;
     ABookMark:=@ATBookmark;
     ABookMark:=@ATBookmark;
-    FDatasetReader.StoreFieldDefs(FieldDefs,FAutoIncValue);
+    FDatasetReader.StoreFieldDefs(FAutoIncValue);
 
 
     StoreDSState:=SetTempState(dsFilter);
     StoreDSState:=SetTempState(dsFilter);
     ScrollResult:=FCurrentIndex.ScrollFirst;
     ScrollResult:=FCurrentIndex.ScrollFirst;
@@ -2809,9 +2811,9 @@ begin
       HandleUpdateBuffersFromRecord(True,ABookmark^,RowState);
       HandleUpdateBuffersFromRecord(True,ABookmark^,RowState);
       FFilterBuffer:=FCurrentIndex.CurrentBuffer;
       FFilterBuffer:=FCurrentIndex.CurrentBuffer;
       if RowState=[] then
       if RowState=[] then
-        FDatasetReader.StoreRecord(Self,[])
+        FDatasetReader.StoreRecord([])
       else
       else
-        FDatasetReader.StoreRecord(Self,RowState,FCurrentUpdateBuffer);
+        FDatasetReader.StoreRecord(RowState,FCurrentUpdateBuffer);
 
 
       ScrollResult:=FCurrentIndex.ScrollForward;
       ScrollResult:=FCurrentIndex.ScrollForward;
       if ScrollResult<>grOK then
       if ScrollResult<>grOK then
@@ -2850,9 +2852,9 @@ var APacketReaderReg : TDatapacketReaderRegistration;
 begin
 begin
   CheckBiDirectional;
   CheckBiDirectional;
   if GetRegisterDatapacketReader(Nil,format,APacketReaderReg) then
   if GetRegisterDatapacketReader(Nil,format,APacketReaderReg) then
-    APacketWriter := APacketReaderReg.ReaderClass.create(AStream)
+    APacketWriter := APacketReaderReg.ReaderClass.Create(Self, AStream)
   else if Format = dfBinary then
   else if Format = dfBinary then
-    APacketWriter := TFpcBinaryDatapacketReader.create(AStream)
+    APacketWriter := TFpcBinaryDatapacketReader.Create(Self, AStream)
   else
   else
     DatabaseError(SNoReaderClassRegistered);
     DatabaseError(SNoReaderClassRegistered);
   try
   try
@@ -2932,7 +2934,7 @@ procedure TCustomBufDataset.IntLoadFielddefsFromFile;
 
 
 begin
 begin
   FieldDefs.Clear;
   FieldDefs.Clear;
-  FDatasetReader.LoadFielddefs(FieldDefs, FAutoIncValue);
+  FDatasetReader.LoadFieldDefs(FAutoIncValue);
   if DefaultFields then
   if DefaultFields then
     CreateFields
     CreateFields
   else
   else
@@ -2965,7 +2967,7 @@ begin
       FFilterBuffer:=IntAllocRecordBuffer;
       FFilterBuffer:=IntAllocRecordBuffer;
       fillchar(FFilterBuffer^,FNullmaskSize,0);
       fillchar(FFilterBuffer^,FNullmaskSize,0);
       FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := FFilterBuffer;
       FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := FFilterBuffer;
-      FDatasetReader.RestoreRecord(self);
+      FDatasetReader.RestoreRecord;
 
 
       FDatasetReader.GotoNextRecord;
       FDatasetReader.GotoNextRecord;
       if not FDatasetReader.GetCurrentRecord then
       if not FDatasetReader.GetCurrentRecord then
@@ -2980,7 +2982,7 @@ begin
       FIndexes[0].StoreSpareRecIntoBookmark(@FUpdateBuffer[FCurrentUpdateBuffer].BookmarkData);
       FIndexes[0].StoreSpareRecIntoBookmark(@FUpdateBuffer[FCurrentUpdateBuffer].BookmarkData);
       fillchar(FFilterBuffer^,FNullmaskSize,0);
       fillchar(FFilterBuffer^,FNullmaskSize,0);
 
 
-      FDatasetReader.RestoreRecord(self);
+      FDatasetReader.RestoreRecord;
       FIndexes[0].AddRecord;
       FIndexes[0].AddRecord;
       inc(FBRecordCount);
       inc(FBRecordCount);
 
 
@@ -2998,7 +3000,7 @@ begin
       fillchar(FFilterBuffer^,FNullmaskSize,0);
       fillchar(FFilterBuffer^,FNullmaskSize,0);
 
 
       FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := FFilterBuffer;
       FUpdateBuffer[FCurrentUpdateBuffer].OldValuesBuffer := FFilterBuffer;
-      FDatasetReader.RestoreRecord(self);
+      FDatasetReader.RestoreRecord;
 
 
       FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind:= ukDelete;
       FUpdateBuffer[FCurrentUpdateBuffer].UpdateKind:= ukDelete;
       FIndexes[0].StoreSpareRecIntoBookmark(@FUpdateBuffer[FCurrentUpdateBuffer].BookmarkData);
       FIndexes[0].StoreSpareRecIntoBookmark(@FUpdateBuffer[FCurrentUpdateBuffer].BookmarkData);
@@ -3020,7 +3022,7 @@ begin
       FFilterBuffer:=FIndexes[0].SpareBuffer;
       FFilterBuffer:=FIndexes[0].SpareBuffer;
       fillchar(FFilterBuffer^,FNullmaskSize,0);
       fillchar(FFilterBuffer^,FNullmaskSize,0);
 
 
-      FDatasetReader.RestoreRecord(self);
+      FDatasetReader.RestoreRecord;
 
 
       if rsvInserted in ARowState then
       if rsvInserted in ARowState then
         begin
         begin
@@ -3496,6 +3498,7 @@ begin
   //  inherited EndUpdate;
   //  inherited EndUpdate;
 end;
 end;
 
 
+
 { TDataPacketReader }
 { TDataPacketReader }
 
 
 class function TDataPacketReader.RowStateToByte(const ARowState: TRowState
 class function TDataPacketReader.RowStateToByte(const ARowState: TRowState
@@ -3519,32 +3522,33 @@ begin
   if (AByte and 8)=8 then Result := Result+[rsvUpdated];
   if (AByte and 8)=8 then Result := Result+[rsvUpdated];
 end;
 end;
 
 
-class procedure TDataPacketReader.RestoreBlobField(ADataset: TCustomBufDataset; AField: TField; ASource: pointer; ASize: integer);
+procedure TDataPacketReader.RestoreBlobField(AField: TField; ASource: pointer; ASize: integer);
 var
 var
   ABufBlobField: TBufBlobField;
   ABufBlobField: TBufBlobField;
 begin
 begin
-  ABufBlobField.BlobBuffer:=ADataset.GetNewBlobBuffer;
+  ABufBlobField.BlobBuffer:=FDataSet.GetNewBlobBuffer;
   ABufBlobField.BlobBuffer^.Size:=ASize;
   ABufBlobField.BlobBuffer^.Size:=ASize;
   ReAllocMem(ABufBlobField.BlobBuffer^.Buffer, ASize);
   ReAllocMem(ABufBlobField.BlobBuffer^.Buffer, ASize);
   move(ASource^, ABufBlobField.BlobBuffer^.Buffer^, ASize);
   move(ASource^, ABufBlobField.BlobBuffer^.Buffer^, ASize);
   AField.SetData(@ABufBlobField);
   AField.SetData(@ABufBlobField);
 end;
 end;
 
 
-constructor TDataPacketReader.create(AStream: TStream);
+constructor TDataPacketReader.Create(ADataSet: TCustomBufDataset; AStream: TStream);
 begin
 begin
+  FDataSet := ADataSet;
   FStream := AStream;
   FStream := AStream;
 end;
 end;
 
 
 
 
 { TFpcBinaryDatapacketReader }
 { TFpcBinaryDatapacketReader }
 
 
-constructor TFpcBinaryDatapacketReader.Create(AStream: TStream);
+constructor TFpcBinaryDatapacketReader.Create(ADataSet: TCustomBufDataset; AStream: TStream);
 begin
 begin
   inherited;
   inherited;
   FVersion := 20; // default version 2.0
   FVersion := 20; // default version 2.0
 end;
 end;
 
 
-procedure TFpcBinaryDatapacketReader.LoadFieldDefs(AFieldDefs: TFieldDefs; var AnAutoIncValue: integer);
+procedure TFpcBinaryDatapacketReader.LoadFieldDefs(var AnAutoIncValue: integer);
 
 
 var FldCount : word;
 var FldCount : word;
     i        : integer;
     i        : integer;
@@ -3565,8 +3569,8 @@ begin
 
 
   // Read FieldDefs
   // Read FieldDefs
   FldCount := Stream.ReadWord;
   FldCount := Stream.ReadWord;
-  AFieldDefs.Clear;
-  for i := 0 to FldCount - 1 do with TFieldDef.Create(AFieldDefs) do
+  DataSet.FieldDefs.Clear;
+  for i := 0 to FldCount - 1 do with TFieldDef.Create(DataSet.FieldDefs) do
     begin
     begin
     Name := Stream.ReadAnsiString;
     Name := Stream.ReadAnsiString;
     Displayname := Stream.ReadAnsiString;
     Displayname := Stream.ReadAnsiString;
@@ -3583,14 +3587,14 @@ begin
   SetLength(FNullBitmap, FNullBitmapSize);
   SetLength(FNullBitmap, FNullBitmapSize);
 end;
 end;
 
 
-procedure TFpcBinaryDatapacketReader.StoreFieldDefs(AFieldDefs: TFieldDefs; AnAutoIncValue: integer);
+procedure TFpcBinaryDatapacketReader.StoreFieldDefs(AnAutoIncValue: integer);
 var i : integer;
 var i : integer;
 begin
 begin
   Stream.Write(FpcBinaryIdent2[1], length(FpcBinaryIdent2));
   Stream.Write(FpcBinaryIdent2[1], length(FpcBinaryIdent2));
   Stream.WriteByte(FVersion);
   Stream.WriteByte(FVersion);
 
 
-  Stream.WriteWord(AFieldDefs.Count);
-  for i := 0 to AFieldDefs.Count -1 do with AFieldDefs[i] do
+  Stream.WriteWord(DataSet.FieldDefs.Count);
+  for i := 0 to DataSet.FieldDefs.Count - 1 do with DataSet.FieldDefs[i] do
     begin
     begin
     Stream.WriteAnsiString(Name);
     Stream.WriteAnsiString(Name);
     Stream.WriteAnsiString(DisplayName);
     Stream.WriteAnsiString(DisplayName);
@@ -3605,7 +3609,7 @@ begin
   i := AnAutoIncValue;
   i := AnAutoIncValue;
   Stream.WriteBuffer(i,sizeof(i));
   Stream.WriteBuffer(i,sizeof(i));
 
 
-  FNullBitmapSize := (AFieldDefs.Count + 7) div 8;
+  FNullBitmapSize := (DataSet.FieldDefs.Count + 7) div 8;
   SetLength(FNullBitmap, FNullBitmapSize);
   SetLength(FNullBitmap, FNullBitmapSize);
 end;
 end;
 
 
@@ -3636,14 +3640,14 @@ begin
   //  Do Nothing
   //  Do Nothing
 end;
 end;
 
 
-procedure TFpcBinaryDatapacketReader.RestoreRecord(ADataset: TCustomBufDataset);
+procedure TFpcBinaryDatapacketReader.RestoreRecord;
 var
 var
   AField: TField;
   AField: TField;
   i: integer;
   i: integer;
   L: cardinal;
   L: cardinal;
   B: TBytes;
   B: TBytes;
 begin
 begin
-  with ADataset do
+  with DataSet do
     case FVersion of
     case FVersion of
       10:
       10:
         Stream.ReadBuffer(GetCurrentBuffer^, FRecordSize);  // Ugly because private members of ADataset are used...
         Stream.ReadBuffer(GetCurrentBuffer^, FRecordSize);  // Ugly because private members of ADataset are used...
@@ -3670,7 +3674,7 @@ begin
             if L > 0 then
             if L > 0 then
               Stream.ReadBuffer(B[0], L);
               Stream.ReadBuffer(B[0], L);
             if AField.DataType in BlobFieldTypes then
             if AField.DataType in BlobFieldTypes then
-              RestoreBlobField(ADataset, AField, @B[0], L)
+              RestoreBlobField(AField, @B[0], L)
             else
             else
               AField.SetData(@B[0], False);  // set it to the FilterBuffer
               AField.SetData(@B[0], False);  // set it to the FilterBuffer
             end;
             end;
@@ -3679,8 +3683,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TFpcBinaryDatapacketReader.StoreRecord(ADataset: TCustomBufDataset;
-  ARowState: TRowState; AUpdOrder : integer);
+procedure TFpcBinaryDatapacketReader.StoreRecord(ARowState: TRowState; AUpdOrder : integer);
 var
 var
   AField: TField;
   AField: TField;
   i: integer;
   i: integer;
@@ -3694,7 +3697,7 @@ begin
     Stream.WriteBuffer(AUpdOrder,sizeof(integer));
     Stream.WriteBuffer(AUpdOrder,sizeof(integer));
 
 
   // Record data
   // Record data
-  with ADataset do
+  with DataSet do
     case FVersion of
     case FVersion of
       10:
       10:
         Stream.WriteBuffer(GetCurrentBuffer^, FRecordSize); // Old 1.0 version
         Stream.WriteBuffer(GetCurrentBuffer^, FRecordSize); // Old 1.0 version

+ 14 - 14
packages/fcl-db/src/base/xmldatapacketreader.pp

@@ -48,14 +48,14 @@ type
     FLastChange    : integer;
     FLastChange    : integer;
   public
   public
     destructor destroy; override;
     destructor destroy; override;
-    procedure StoreFieldDefs(AFieldDefs : TFieldDefs; AnAutoIncValue : integer); override;
-    procedure StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0); override;
+    procedure StoreFieldDefs(AnAutoIncValue : integer); override;
+    procedure StoreRecord(ARowState : TRowState; AUpdOrder : integer = 0); override;
     procedure FinalizeStoreRecords; override;
     procedure FinalizeStoreRecords; override;
-    procedure LoadFieldDefs(AFieldDefs : TFieldDefs; var AnAutoIncValue : integer); override;
+    procedure LoadFieldDefs(var AnAutoIncValue : integer); override;
     procedure InitLoadRecords; override;
     procedure InitLoadRecords; override;
     function GetCurrentRecord : boolean; override;
     function GetCurrentRecord : boolean; override;
     function GetRecordRowState(out AUpdOrder : Integer) : TRowState; override;
     function GetRecordRowState(out AUpdOrder : Integer) : TRowState; override;
-    procedure RestoreRecord(ADataset : TCustomBufDataset); override;
+    procedure RestoreRecord; override;
     procedure GotoNextRecord; override;
     procedure GotoNextRecord; override;
     class function RecognizeStream(AStream : TStream) : boolean; override;
     class function RecognizeStream(AStream : TStream) : boolean; override;
   end;
   end;
@@ -123,7 +123,7 @@ begin
   inherited destroy;
   inherited destroy;
 end;
 end;
 
 
-procedure TXMLDatapacketReader.LoadFieldDefs(AFieldDefs: TFieldDefs; var AnAutoIncValue: integer);
+procedure TXMLDatapacketReader.LoadFieldDefs(var AnAutoIncValue: integer);
 
 
   function GetNodeAttribute(const aNode : TDOMNode; AttName : String) : string;
   function GetNodeAttribute(const aNode : TDOMNode; AttName : String) : string;
   var AnAttr : TDomNode;
   var AnAttr : TDomNode;
@@ -157,7 +157,7 @@ begin
     AFieldNode := item[i];
     AFieldNode := item[i];
     if AFieldNode.CompareName('FIELD')=0 then
     if AFieldNode.CompareName('FIELD')=0 then
       begin
       begin
-      AFieldDef := TFieldDef.create(AFieldDefs);
+      AFieldDef := TFieldDef.Create(DataSet.FieldDefs);
       AFieldDef.DisplayName:=GetNodeAttribute(AFieldNode,'fieldname');
       AFieldDef.DisplayName:=GetNodeAttribute(AFieldNode,'fieldname');
       AFieldDef.Name:=GetNodeAttribute(AFieldNode,'attrname');
       AFieldDef.Name:=GetNodeAttribute(AFieldNode,'attrname');
       AFieldDef.Size:=StrToIntDef(GetNodeAttribute(AFieldNode,'width'),0);
       AFieldDef.Size:=StrToIntDef(GetNodeAttribute(AFieldNode,'width'),0);
@@ -189,7 +189,7 @@ begin
   FRecordNode := nil;
   FRecordNode := nil;
 end;
 end;
 
 
-procedure TXMLDatapacketReader.StoreFieldDefs(AFieldDefs: TFieldDefs; AnAutoIncValue: integer);
+procedure TXMLDatapacketReader.StoreFieldDefs(AnAutoIncValue: integer);
 
 
 var i,p         : integer;
 var i,p         : integer;
     AFieldNode  : TDOMElement;
     AFieldNode  : TDOMElement;
@@ -203,7 +203,7 @@ begin
   MetaDataNode := XMLDocument.CreateElement('METADATA');
   MetaDataNode := XMLDocument.CreateElement('METADATA');
   FieldsNode := XMLDocument.CreateElement('FIELDS');
   FieldsNode := XMLDocument.CreateElement('FIELDS');
 
 
-  for i := 0 to AFieldDefs.Count -1 do with AFieldDefs[i] do
+  for i := 0 to DataSet.FieldDefs.Count - 1 do with DataSet.FieldDefs[i] do
     begin
     begin
     AFieldNode := XMLDocument.CreateElement('FIELD');
     AFieldNode := XMLDocument.CreateElement('FIELD');
     if Name <> '' then AFieldNode.SetAttribute('fieldname',Name);
     if Name <> '' then AFieldNode.SetAttribute('fieldname',Name);
@@ -335,7 +335,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TXMLDatapacketReader.RestoreRecord(ADataset : TCustomBufDataset);
+procedure TXMLDatapacketReader.RestoreRecord;
 var FieldNr      : integer;
 var FieldNr      : integer;
     AFieldNode   : TDomNode;
     AFieldNode   : TDomNode;
     ABufBlobField: TBufBlobField;
     ABufBlobField: TBufBlobField;
@@ -343,7 +343,7 @@ var FieldNr      : integer;
     s: string;
     s: string;
     ws: widestring;
     ws: widestring;
 begin
 begin
-  with ADataset do for FieldNr:=0 to FieldDefs.Count-1 do
+  with DataSet do for FieldNr:=0 to FieldDefs.Count-1 do
     begin
     begin
     AField := Fields.FieldByNumber(FieldDefs[FieldNr].FieldNo);
     AField := Fields.FieldByNumber(FieldDefs[FieldNr].FieldNo);
     AFieldNode := FRecordNode.Attributes.GetNamedItem(FieldDefs[FieldNr].Name);
     AFieldNode := FRecordNode.Attributes.GetNamedItem(FieldDefs[FieldNr].Name);
@@ -354,11 +354,11 @@ begin
         s := DecodeStringBase64(s);
         s := DecodeStringBase64(s);
       case FieldDefs[FieldNr].DataType of
       case FieldDefs[FieldNr].DataType of
         ftBlob, ftMemo:
         ftBlob, ftMemo:
-          RestoreBlobField(ADataset, AField, @s[1], length(s));
+          RestoreBlobField(AField, @s[1], length(s));
         ftWideMemo:
         ftWideMemo:
           begin
           begin
           ws := s;
           ws := s;
-          RestoreBlobField(ADataset, AField, @ws[1], length(ws)*sizeof(WideChar));
+          RestoreBlobField(AField, @ws[1], length(ws)*sizeof(WideChar));
           end
           end
         else;
         else;
           AField.AsString := s;  // set it to the filterbuffer
           AField.AsString := s;  // set it to the filterbuffer
@@ -369,7 +369,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-procedure TXMLDatapacketReader.StoreRecord(ADataset : TCustomBufDataset; ARowState : TRowState; AUpdOrder : integer = 0);
+procedure TXMLDatapacketReader.StoreRecord(ARowState : TRowState; AUpdOrder : integer = 0);
 var FieldNr : Integer;
 var FieldNr : Integer;
     AFieldDef: TFieldDef;
     AFieldDef: TFieldDef;
     AField: TField;
     AField: TField;
@@ -377,7 +377,7 @@ var FieldNr : Integer;
 begin
 begin
   inc(FEntryNr);
   inc(FEntryNr);
   ARecordNode := XMLDocument.CreateElement('ROW');
   ARecordNode := XMLDocument.CreateElement('ROW');
-  with ADataset do for FieldNr := 0 to FieldDefs.Count-1 do
+  with DataSet do for FieldNr := 0 to FieldDefs.Count-1 do
     begin
     begin
     AFieldDef := FieldDefs[FieldNr];
     AFieldDef := FieldDefs[FieldNr];
     AField := Fields.FieldByNumber(AFieldDef.FieldNo);
     AField := Fields.FieldByNumber(AFieldDef.FieldNo);