1- unit uRESTDWStorageBin;
1+ unit uRESTDWStorageBin;
22
33{ $I ..\Includes\uRESTDW.inc}
44
@@ -248,15 +248,23 @@ interface
248248 If (Not (Assigned(DataSet.FindField(FFieldNames[Index]))) And
249249 Not (FindDef(FFieldNames[Index]))) Then
250250 Begin
251- VFDef := DataSet.FieldDefs.AddFieldDef;
252- VFDef.Name := FFieldNames[Index];
253- VFDef.DataType := DWFieldTypeToFieldType(FFieldTypes[Index]);
254- VFDef.Size := FFieldSize[Index];
251+ If FFieldTypes[Index] = { $IFDEF FPC} 45 { $ELSE} dwftExtended{ $ENDIF} Then
252+ Begin
253+ DataSet.FieldDefs.Add(FFieldNames[Index], DWFieldTypeToFieldType(FFieldTypes[Index]));
254+ VFDef := DataSet.FieldDefs[DataSet.FieldDefs.Count -1 ];
255+ End
256+ Else
257+ Begin
258+ VFDef := DataSet.FieldDefs.AddFieldDef;
259+ VFDef.Name := FFieldNames[Index];
260+ VFDef.DataType := DWFieldTypeToFieldType(FFieldTypes[Index]);
261+ End ;
262+ If FFieldTypes[Index] <> dwftExtended Then
263+ VFDef.Size := FFieldSize[Index];
255264 VFDef.Required := FFieldAttrs[Index] and 1 > 0 ;
256265 Case FFieldTypes[Index] of
257266 dwftFloat,
258- dwftCurrency,
259- dwftSingle : VFDef.Precision := FFieldPrecision[Index];
267+ dwftCurrency : VFDef.Precision := FFieldPrecision[Index];
260268 dwftBCD,
261269 dwftFMTBcd : Begin
262270 { $IFNDEF FPC}
@@ -327,26 +335,22 @@ interface
327335 FFieldNames[I] := vFieldName;
328336 // field type
329337 AStream.Read(vFieldType, SizeOf(vFieldType));
330- FFieldTypes[I] := vFieldType;
338+ If vFieldType in [{ $IFDEF FPC} 45 , { $ENDIF} dwftExtended] Then
339+ FFieldTypes[I] := { $IFDEF FPC} Integer(ftFMTBcd){ $ELSE} Integer(ftExtended){ $ENDIF}
340+ Else
341+ FFieldTypes[I] := vFieldType;
331342 // field size
332343 AStream.Read(vFieldSize, SizeOf(vFieldSize));
333344 FFieldSize[I] := vFieldSize;
334345 // field precision
335346 AStream.Read(vFieldPrecision, SizeOf(vFieldPrecision));
336347 { $IFDEF FPC}
337- If vFieldType in [dwftSingle, dwftFloat, dwftFMTBcd, dwftBCD] Then
338- If vFieldType in [dwftFloat, dwftFMTBcd, dwftBCD] Then
339- Begin
340- If (vFieldPrecision < 12 ) Or
341- (FFieldPrecision[I] = 0 ) Then
342- FFieldPrecision[I] := 12 ;
343- End
344- Else
345- Begin
346- If (vFieldPrecision < 8 ) Or
347- (FFieldPrecision[I] = 0 ) Then
348- FFieldPrecision[I] := 8 ;
349- End ;
348+ If vFieldType in [dwftFloat, dwftFMTBcd, dwftBCD] Then
349+ Begin
350+ If (vFieldPrecision < 12 ) Or
351+ (FFieldPrecision[I] = 0 ) Then
352+ FFieldPrecision[I] := 12 ;
353+ End ;
350354 { $ELSE}
351355 FFieldPrecision[I] := vFieldPrecision;
352356 If vFieldType in [dwftSingle] Then
@@ -425,6 +429,7 @@ interface
425429 vInt64 : DWInt64;
426430 vSingle : DWSingle;
427431 vDouble : DWDouble;
432+ vExtended : DWLongDouble;
428433 vWord : DWWord;
429434 vCurrency : DWCurrency;
430435 vTimeStamp : { $IFDEF FPC} TTimeStamp { $ELSE} TSQLTimeStamp { $ENDIF} ;
@@ -469,12 +474,12 @@ interface
469474 dwftSmallint,
470475 dwftWord,
471476 dwftInteger,
472- dwftSingle,
477+ // dwftSingle,
473478 dwftExtended,
474479 dwftFloat,
475480 dwftOraTimeStamp,
476481 dwftBCD,
477- dwftFMTBcd,
482+ // dwftFMTBcd,
478483 dwftCurrency,
479484 dwftDate,
480485 dwftTime,
@@ -653,22 +658,22 @@ interface
653658 Move(vVarBytes[0 ], PData^, Sizeof(Boolean) + Sizeof(vInt));
654659 End ;
655660 End ;
656- // 4 - Bytes - Flutuantes
657- dwftSingle :Begin // Gledston
658- vLength := SizeOf(vDouble);
659- stream.Read(vDouble, vLength);
660- If aField <> Nil Then
661- Begin
662- // Move(vSingle,PData^,Sizeof(vSingle));
663- SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble));
664- // Move Null para Bytes
665- Move(vBoolean, vVarBytes[0 ], Sizeof(Boolean));
666- // Move Bytes do Dado para Bytes
667- Move(vDouble, vVarBytes[1 ], Sizeof(vDouble));
668- // Move Bytes para Buffer
669- Move(vVarBytes[0 ], PData^, Length(vVarBytes));
670- End ;
671- End ;
661+ // // 4 - Bytes - Flutuantes
662+ // dwftSingle :Begin // Gledston
663+ // vLength := SizeOf(vDouble);
664+ // stream.Read(vDouble, vLength);
665+ // If aField <> Nil Then
666+ // Begin
667+ // //Move(vSingle,PData^,Sizeof(vSingle));
668+ // SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble));
669+ // //Move Null para Bytes
670+ // Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
671+ // //Move Bytes do Dado para Bytes
672+ // Move(vDouble, vVarBytes[1], Sizeof(vDouble));
673+ // //Move Bytes para Buffer
674+ // Move(vVarBytes[0], PData^, Length(vVarBytes));
675+ // End;
676+ // End;
672677 // 8 - Bytes - Inteiros
673678 dwftLargeint,
674679 dwftAutoInc,
@@ -686,7 +691,13 @@ interface
686691 End ;
687692 End ;
688693 // 8 - Bytes - Flutuantes
689- dwftFloat :Begin
694+ dwftFloat
695+ { $IFDEF FPC}
696+ , 45 // Extended
697+ { $ENDIF}
698+ , dwftExtended
699+
700+ :Begin
690701 stream.Read(vDouble, SizeOf(vDouble));
691702 If aField <> Nil Then
692703 Begin
@@ -699,23 +710,23 @@ interface
699710 Move(vVarBytes[0 ], PData^, Length(vVarBytes));
700711 End ;
701712 End ;
702- // dwftExtended :Begin
703- // stream.Read(vDouble , SizeOf(Extended ));
704- // If aField <> Nil Then
705- // Begin
706- // SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(Extended ));
707- // //Move Null para Bytes
708- // Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
709- // //Move Bytes do Dado para Bytes
710- // Move(vDouble , vVarBytes[1], Sizeof(Extended ));
711- // //Move Bytes para Buffer
712- // {$IFDEF FPC}
713- // PRESTDWBytes(pData)^ := vVarBytes;
714- // {$ELSE}
715- // Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vDouble ));
716- // {$ENDIF}
717- // End;
718- // End;
713+ // dwftExtended :Begin
714+ // stream.Read(vExtended , SizeOf(vExtended ));
715+ // If aField <> Nil Then
716+ // Begin
717+ // SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vExtended ));
718+ // //Move Null para Bytes
719+ // Move(vBoolean, vVarBytes[0], Sizeof(Boolean));
720+ // //Move Bytes do Dado para Bytes
721+ // Move(vExtended , vVarBytes[1], Sizeof(vExtended ));
722+ // //Move Bytes para Buffer
723+ // {$IFDEF FPC}
724+ // PRESTDWBytes(pData)^ := vVarBytes;
725+ // {$ELSE}
726+ // Move(vVarBytes[0], PData^, Sizeof(Boolean) + Sizeof(vExtended ));
727+ // {$ENDIF}
728+ // End;
729+ // End;
719730 // 8 - Bytes - Date, Time, DateTime, TimeStamp
720731 dwftDate,
721732 dwftTime,
@@ -822,7 +833,7 @@ interface
822833 End ;
823834 End ;
824835 // 8 - Bytes - Currency
825- dwftFMTBcd : Begin
836+ { $IFNDEF FPC } dwftFMTBcd : Begin
826837 stream.Read(vCurrency, SizeOf(vCurrency));
827838 { $IFDEF FPC}
828839 vBCD := CurrToBcd(vCurrency);
@@ -841,6 +852,7 @@ interface
841852 // Move Bytes para Buffer
842853 Move(vVarBytes[0 ], PData^, Sizeof(Boolean) + Sizeof(vBCD));
843854 End ;
855+ { $ENDIF}
844856 // N Bytes - String Blobs
845857 dwftWideMemo,
846858 dwftFmtMemo,
@@ -1340,6 +1352,7 @@ interface
13401352 vSingle : DWSingle;
13411353 vDouble : DWDouble;
13421354 vCurrency : DWCurrency;
1355+ vExtended : DWLongDouble;
13431356 vBCD : DWBCD;
13441357 vMemoryStream : TMemoryStream;
13451358 vBoolean : Boolean;
@@ -1456,11 +1469,11 @@ interface
14561469 Move(PData^, vInt, Sizeof(vInt));
14571470 Stream.Write(vByte, Sizeof(vInt));
14581471 End ;
1459- // 4 - Bytes - Flutuantes
1460- dwftSingle : Begin
1461- Move(PData^, vDouble, Sizeof(vDouble));
1462- Stream.Write(vDouble, Sizeof(vDouble));
1463- End ;
1472+ // // 4 - Bytes - Flutuantes
1473+ // dwftSingle : Begin
1474+ // Move(PData^, vDouble, Sizeof(vDouble));
1475+ // Stream.Write(vDouble, Sizeof(vDouble));
1476+ // End;
14641477 // 8 - Bytes - Inteiros
14651478 dwftLargeint,
14661479 dwftAutoInc,
@@ -1506,6 +1519,10 @@ interface
15061519 Move(PData^, vCurrency, Sizeof(vCurrency));
15071520 Stream.Write(vCurrency, Sizeof(vCurrency));
15081521 End ;
1522+ dwftExtended : Begin
1523+ Move(PData^, vExtended, Sizeof(vExtended));
1524+ Stream.Write(vExtended, Sizeof(vExtended));
1525+ End ;
15091526 // 8 - Bytes - Currency
15101527 dwftBCD : Begin
15111528 { $IFDEF FPC}
@@ -1520,6 +1537,7 @@ interface
15201537 { $ENDIF}
15211538 Stream.Write(vCurrency, Sizeof(vCurrency));
15221539 End ;
1540+ { $IFNDEF FPC}
15231541 // 8 - Bytes - Currency
15241542 dwftFMTBcd : Begin
15251543 Move(PData^, vBCD, Sizeof(vBCD));
@@ -1534,6 +1552,7 @@ interface
15341552 { $ENDIF}
15351553 Stream.Write(vCurrency, Sizeof(vCurrency));
15361554 End ;
1555+ { $ENDIF}
15371556 // N Bytes - Blobs
15381557// dwftWideMemo,
15391558// dwftFmtMemo,
@@ -1601,6 +1620,7 @@ interface
16011620 vInt : DWInteger;
16021621 vDouble : DWDouble;
16031622 vWord : DWWord;
1623+ vExtended : DWLongDouble;
16041624 vSingle : DWSingle;
16051625 vCurrency : DWCurrency;
16061626 vMemoryStream : TMemoryStream;
@@ -1674,10 +1694,10 @@ interface
16741694 AStream.Write(vInt, Sizeof(vInt));
16751695 End ;
16761696 // 4 - Bytes - Flutuantes
1677- dwftSingle : Begin
1678- vSingle := ADataset.Fields[i].Value ;
1679- AStream.Write(vSingle, SizeOf(vSingle));
1680- End ;
1697+ // dwftSingle : Begin
1698+ // vSingle := ADataset.Fields[i].Value;
1699+ // AStream.Write(vSingle, SizeOf(vSingle));
1700+ // End;
16811701 // 8 - Bytes - Inteiros
16821702 dwftLargeint,
16831703 dwftAutoInc,
@@ -1690,10 +1710,19 @@ interface
16901710 AStream.Write(vInt64, Sizeof(vInt64));
16911711 End ;
16921712 // 8 - Bytes - Flutuantes
1693- dwftFloat : Begin
1694- vDouble := ADataset.Fields[i].AsFloat;
1695- AStream.Write(vDouble, Sizeof(vDouble));
1696- End ;
1713+ dwftFloat
1714+ { $IFDEF FPC}
1715+ , 45 , dwftExtended
1716+ { $ENDIF} : Begin
1717+ vDouble := ADataset.Fields[i].AsFloat;
1718+ AStream.Write(vDouble, Sizeof(vDouble));
1719+ End ;
1720+ { $IFNDEF FPC}
1721+ dwftExtended : Begin
1722+ vExtended := ADataset.Fields[i]{ $IFNDEF FPC} .AsExtended{ $ELSE} .AsFloat{ $ENDIF} ;
1723+ AStream.Write(vExtended, Sizeof(vExtended));
1724+ End ;
1725+ { $ENDIF}
16971726 // 8 - Bytes - Date, Time, DateTime, TimeStamp
16981727 dwftDate,
16991728 dwftTime,
@@ -1717,8 +1746,10 @@ interface
17171746 { $ENDIF}
17181747 // 8 - Bytes - Currency
17191748 dwftCurrency,
1720- dwftBCD,
1721- dwftFMTBcd : Begin
1749+ dwftBCD
1750+ { $IFNDEF FPC}
1751+ , dwftFMTBcd
1752+ { $ENDIF} : Begin
17221753 { $IFDEF FPC}
17231754 If ADataset.Fields[i].Isnull Then
17241755 vCurrency := 0
0 commit comments