Browse Source

* Use DataConvert in SetFieldData

git-svn-id: trunk@6371 -
joost 18 years ago
parent
commit
126f0dceac
2 changed files with 42 additions and 21 deletions
  1. 41 20
      fcl/db/dataset.inc
  2. 1 1
      fcl/db/db.pp

+ 41 - 20
fcl/db/dataset.inc

@@ -505,16 +505,32 @@ var
   
   
 begin
 begin
   DT := aField.DataType;
   DT := aField.DataType;
-  case DT of
-    ftDate, ftTime, ftDateTime: TDateTime(aDest^) := DateTimeRecToDateTime(DT, TDateTimeRec(aSource^));
-    ftTimeStamp               : TTimeStamp(aDest^) := TTimeStamp(aSource^);
-//    ftBCD                     : ;
-//    ftFMTBCD                  : ;
-//    ftBytes                   : ;
-//    ftVarBytes                : ;
-//    ftWideString              : ;
+  if aToNative then
+    begin
+    case DT of
+      ftDate, ftTime, ftDateTime: TDateTimeRec(aDest^) := DateTimeToDateTimeRec(DT, TDateTime(aSource^));
+      ftTimeStamp               : TTimeStamp(aDest^) := TTimeStamp(aSource^);
+  //    ftBCD                     : ;
+      ftFMTBCD                  : TBcd(aDest^) := TBcd(aSource^);
+  //    ftBytes                   : ;
+  //    ftVarBytes                : ;
+  //    ftWideString              : ;
 
 
-  end;
+      end
+    end
+  else
+    begin
+    case DT of
+      ftDate, ftTime, ftDateTime: TDateTime(aDest^) := DateTimeRecToDateTime(DT, TDateTimeRec(aSource^));
+      ftTimeStamp               : TTimeStamp(aDest^) := TTimeStamp(aSource^);
+  //    ftBCD                     : ;
+      ftFMTBCD                  : TBcd(aDest^) := TBcd(aSource^);
+  //    ftBytes                   : ;
+  //    ftVarBytes                : ;
+  //    ftWideString              : ;
+
+      end
+    end
 end;
 end;
 
 
 function TDataSet.GetFieldData(Field: TField; Buffer: Pointer;
 function TDataSet.GetFieldData(Field: TField; Buffer: Pointer;
@@ -598,25 +614,30 @@ end;
 procedure TDataSet.SetFieldData(Field: TField; Buffer: Pointer;
 procedure TDataSet.SetFieldData(Field: TField; Buffer: Pointer;
   NativeFormat: Boolean);
   NativeFormat: Boolean);
 
 
-
 Var
 Var
-  DT : TFieldType;
-  DTRBuffer : TDateTimeRec;
+  AStatBuffer : Array[0..dsMaxStringSize] of Char;
+  ADynBuffer : pchar;
 
 
 begin
 begin
   if NativeFormat then
   if NativeFormat then
     SetFieldData(Field, Buffer)
     SetFieldData(Field, Buffer)
   else
   else
     begin
     begin
-    DT := Field.DataType;
-    case DT of
-      ftDate, ftTime, ftDateTime: begin
-                                  DTRBuffer := DateTimeToDateTimeRec(DT,TDateTime(buffer^));
-                                  SetFieldData(Field,@DTRBuffer);
-                                  end
+    if Field.DataSize <= dsMaxStringSize then
+      begin
+      DataConvert(Field,Buffer,@AStatBuffer,True);
+      SetfieldData(Field, @AStatBuffer);
+      end
     else
     else
-      SetFieldData(Field, Buffer);
-    end; {case};
+      begin
+      GetMem(ADynBuffer,Field.DataSize);
+      try
+        DataConvert(Field,Buffer,@AStatBuffer,True);
+        SetfieldData(Field, @AStatBuffer);
+      finally
+        FreeMem(ADynBuffer);
+        end;
+      end;
     end;
     end;
 end;
 end;
 
 

+ 1 - 1
fcl/db/db.pp

@@ -1800,7 +1800,7 @@ function SkipComments(var p: PChar; EscapeSlash, EscapeRepeat : Boolean) : boole
 
 
 implementation
 implementation
 
 
-uses dbconst,typinfo;
+uses dbconst,typinfo, fmtbcd;
 
 
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
     Auxiliary functions
     Auxiliary functions