@@ -44,7 +44,7 @@ interface
4444 FFieldSize,
4545 FFieldPrecision : Array of Integer;
4646 FFieldTypes,
47- FFieldAttrs : Array of Byte ;
47+ FFieldAttrs : TFieldAttrs ;
4848 FFieldExists : Array of Boolean;
4949 Procedure SaveRecordToStream (ADataset : TDataset;
5050 Var AStream : TStream);
@@ -382,6 +382,7 @@ interface
382382 FFieldExists[I] := (ADataSet.FindField(FFieldNames[I]) <> nil ); // or (vNoFields);
383383 // create fieldsDefs like fields persistent
384384// If ((vNoFields) Or (Not FFieldExists[I])) Then
385+ ADataSet.FieldAttrs := FFieldAttrs;
385386 CreateFieldDefs(ADataSet, I);
386387 End ;
387388 ADataSet.Open;
@@ -481,9 +482,9 @@ interface
481482 Begin
482483 vLength := Dataset.GetCalcFieldLen(aField.DataType, aField.Size);
483484 { $IFDEF FPC}
484- FillChar(PData^, vLength - 1 , #0 );
485+ FillChar(PData^, vLength, #0 );
485486 { $ELSE}
486- FillChar(pData^, vLength - 1 , 0 );
487+ FillChar(pData^, vLength, 0 );
487488 { $ENDIF}
488489 End
489490 Else If (vDWFieldType In [dwftLongWord,
@@ -610,11 +611,13 @@ interface
610611 dwftVarBytes,
611612 dwftFixedChar,
612613 dwftString : Begin
614+ SetLength(vString, 0 );
613615 stream.Read(vInt64, SizeOf(vInt64));
614616 vString := ' ' ;
615617 If vInt64 > 0 Then
616618 Begin
617619 SetLength(vString, vInt64);
620+ // FillChar(Pointer(@vString)^, vInt64, 0);
618621 { $IFDEF FPC}
619622 stream.Read(Pointer(vString)^, vInt64);
620623 If EncodeStrs Then
@@ -627,7 +630,10 @@ interface
627630 If EncodeStrs Then
628631 vString := DecodeStrings(vString);
629632 If aField <> Nil Then
630- Move(vString[InitStrPos], pData^, Length(vString));
633+ Begin
634+ // FillChar(pData^, vInt64, 0);
635+ Move(Pointer(vString)^, pData^, vInt64);
636+ End ;
631637 { $ENDIF}
632638 End ;
633639 End ;
@@ -717,14 +723,16 @@ interface
717723 , dwftExtended
718724
719725 :Begin
726+ vDouble := 0 ;
720727 stream.Read(vDouble, SizeOf(vDouble));
721728 If aField <> Nil Then
722729 Begin
723- SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble ));
730+ SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vExtended ));
724731 // Move Null para Bytes
725732 Move(vBoolean, vVarBytes[0 ], Sizeof(Boolean));
726733 // Move Bytes do Dado para Bytes
727- Move(vDouble, vVarBytes[1 ], Sizeof(vDouble));
734+ vExtended := vDouble;
735+ Move(vExtended, vVarBytes[1 ], Sizeof(vExtended));
728736 // Move Bytes para Buffer
729737 Move(vVarBytes[0 ], PData^, Length(vVarBytes));
730738 End ;
@@ -958,7 +966,8 @@ interface
958966 Try
959967 Dataset.SetMemoryRecordData(pActualRecord, i);
960968 Finally
961- Dispose(pActualRecord);// FreeMem(PRESTDWMTMemBuffer(@PActualRecord));
969+ Reallocmem(pActualRecord, 0 );
970+ // Dispose(pActualRecord);//FreeMem(PRESTDWMTMemBuffer(@PActualRecord));
962971 End ;
963972 End ;
964973End ;
@@ -1541,8 +1550,8 @@ interface
15411550 Stream.Write(vCurrency, Sizeof(vCurrency));
15421551 End ;
15431552 dwftExtended : Begin
1544- Move(PData^, vExtended , Sizeof(vExtended ));
1545- Stream.Write(vExtended , Sizeof(vExtended ));
1553+ Move(PData^, vDouble , Sizeof(vDouble ));
1554+ Stream.Write(vDouble , Sizeof(vDouble ));
15461555 End ;
15471556 // 8 - Bytes - Currency
15481557 dwftBCD : Begin
@@ -1741,8 +1750,8 @@ interface
17411750 End ;
17421751 { $IFNDEF FPC}
17431752 dwftExtended : Begin
1744- vExtended := ADataset.Fields[i]{ $IFNDEF FPC} .AsExtended{ $ELSE} .AsFloat{ $ENDIF} ;
1745- AStream.Write(vExtended , Sizeof(vExtended ));
1753+ vDouble := ADataset.Fields[i]{ $IFNDEF FPC} .AsExtended{ $ELSE} .AsFloat{ $ENDIF} ;
1754+ AStream.Write(vDouble , Sizeof(vDouble ));
17461755 End ;
17471756 { $ENDIF}
17481757 // 8 - Bytes - Date, Time, DateTime, TimeStamp
0 commit comments