Browse Source

fcl-db: memds: add support for more datatypes (ftGuid, ftWideString, ftFixedWideChar, ftBytes, ftVarBytes)

git-svn-id: trunk@25980 -
lacak 11 years ago
parent
commit
87fbf36ff8
1 changed files with 13 additions and 8 deletions
  1. 13 8
      packages/fcl-db/src/memds/memds.pp

+ 13 - 8
packages/fcl-db/src/memds/memds.pp

@@ -311,12 +311,13 @@ end;
 
 function TMemDataset.MDSGetBufferSize(FieldNo: integer): integer;
 var
- dt1: tfieldtype;
+ FD: TFieldDef;
 begin
- dt1:= FieldDefs.Items[FieldNo-1].Datatype;
- case dt1 of
-  ftString:   result:=FieldDefs.Items[FieldNo-1].Size+1;
-  ftFixedChar:result:=FieldDefs.Items[FieldNo-1].Size+1;
+ FD := FieldDefs.Items[FieldNo-1];
+ case FD.DataType of
+  ftString,
+    ftGuid:   result:=FD.Size+1;
+  ftFixedChar:result:=FD.Size+1;
   ftBoolean:  result:=SizeOf(Wordbool);
   ftCurrency,
   ftFloat:    result:=SizeOf(Double);
@@ -329,8 +330,12 @@ begin
     ftTime,
     ftDate:   result:=SizeOf(TDateTime);
   ftFmtBCD:   result:=SizeOf(TBCD);
+  ftWideString,
+  ftFixedWideChar: result:=(FD.Size+1)*SizeOf(WideChar);
+  ftBytes:    result := FD.Size;
+  ftVarBytes: result := FD.Size + SizeOf(Word);
  else
-  RaiseError(SErrFieldTypeNotSupported,[FieldDefs.Items[FieldNo-1].Name]);
+  RaiseError(SErrFieldTypeNotSupported,[FD.Name]);
  end;
 {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT}
  Result:=Align(Result,4);
@@ -872,9 +877,9 @@ begin
 {$ENDIF}
  for i:= 0 to Count-1 do
    begin
-   GetIntegerPointer(ffieldoffsets, i)^ := frecsize;
+   GetIntegerPointer(ffieldoffsets, i)^ := FRecSize;
    GetIntegerPointer(ffieldsizes,   i)^ := MDSGetbufferSize(i+1);
-   FRecSize:= FRecSize+GetIntegerPointeR(FFieldSizes, i)^;
+   FRecSize:= FRecSize+GetIntegerPointer(FFieldSizes, i)^;
    end;
 end;