Browse Source

* Add possibility to transform strings (code page changes) and add auxiliary methods to TParamMap

Michaël Van Canneyt 1 year ago
parent
commit
a44cc73857
1 changed files with 132 additions and 2 deletions
  1. 132 2
      packages/fcl-db/src/base/fieldmap.pp

+ 132 - 2
packages/fcl-db/src/base/fieldmap.pp

@@ -35,8 +35,13 @@ type
   EFieldMap = Class(EDatabaseError);
 
   { TFieldMap }
+  TTransformMap = class(TObject)
+    function TransFormString(const aString : RawByteString) : RawByteString; virtual;
+    function TransFormString(const aString : UnicodeString) : UnicodeString; virtual;
+    function TransFormString(const aString : WideString) : WideString; virtual;
+  end;
 
-  TFieldMap = Class(TObject)
+  TFieldMap = Class(TTransFormMap)
   private
     FDataset: TDataset;
     FFreeDataset: Boolean;
@@ -70,12 +75,25 @@ type
 
   { TParamMap }
 
-  TParamMap = Class(TObject)
+  TParamMap = Class(TTransformMap)
   private
     FParams: TParams;
   Protected
     Function FindParam(const FN : String) : TParam;
     Function ParamByName(const FN : String) : TParam;
+    Function SetParam(P : TParam; aValue : TBCD) : Boolean; overload;
+    Function SetParam(P : TParam; aValue : Integer) : Boolean; overload;
+    Function SetParam(P : TParam; const aValue : AnsiString) : Boolean; overload;
+    Function SetParam(P : TParam; aValue : Boolean) : Boolean; overload;
+    function SetDateParam(P: TParam; aValue: TDateTime): Boolean; overload;
+    Function SetParam(P : TParam; aValue : Double) : Boolean; overload;
+    Function SetParam(P : TParam; aValue : Single) : Boolean; overload;
+    Function SetParam(P : TParam; aValue : Int64) : Boolean; overload;
+    Function SetParam(P : TParam; aValue : LongWord) : Boolean; overload;
+    Function SetParam(P : TParam; aValue : Currency) : Boolean; overload;
+    Function SetParam(P : TParam; const aValue : UnicodeString) : Boolean; overload;
+    Function SetParam(P : TParam; const aValue : WideString) : Boolean; overload;
+    Function SetParam(P : TParam; aValue : TBytes) : Boolean; overload;
   Public
     Constructor Create(AParams : TParams);
     Procedure InitParams; virtual; abstract;
@@ -472,6 +490,23 @@ begin
   Dataset.Cancel;
 end;
 
+{ TTransformMap }
+
+function TTransformMap.TransFormString(const aString: RawByteString): RawByteString;
+begin
+  Result:=aString;
+end;
+
+function TTransformMap.TransFormString(const aString: UnicodeString): UnicodeString;
+begin
+  Result:=aString;
+end;
+
+function TTransformMap.TransFormString(const aString: WideString): WideString;
+begin
+  Result:=aString;
+end;
+
 { TParamMap }
 
 function TParamMap.FindParam(const FN: String): TParam;
@@ -488,6 +523,98 @@ begin
   Result:=FParams.ParamByName(FN);
 end;
 
+function TParamMap.SetParam(P: TParam; aValue: TBCD): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsFMTBCD:=aValue;
+end;
+
+function TParamMap.SetParam(P: TParam; aValue: Integer): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsInteger:=aValue;
+end;
+
+function TParamMap.SetParam(P: TParam; const aValue: AnsiString): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsString:=TransFormString(aValue);
+end;
+
+function TParamMap.SetParam(P: TParam; aValue: Boolean): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsBoolean:=aValue;
+end;
+
+function TParamMap.SetDateParam(P: TParam; aValue: TDateTime): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsDateTime:=aValue;
+end;
+
+function TParamMap.SetParam(P: TParam; aValue: Double): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsFloat:=aValue;
+end;
+
+function TParamMap.SetParam(P: TParam; aValue: Single): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsSingle:=aValue;
+end;
+
+function TParamMap.SetParam(P: TParam; aValue: Int64): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsLargeInt:=aValue;
+end;
+
+function TParamMap.SetParam(P: TParam; aValue: LongWord): Boolean;
+
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsLongWord:=aValue;
+end;
+
+function TParamMap.SetParam(P: TParam; aValue: Currency): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsCurrency:=aValue;
+end;
+
+function TParamMap.SetParam(P: TParam; const aValue: UnicodeString): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsUnicodeString:=TransFormString(aValue);
+end;
+
+function TParamMap.SetParam(P: TParam; const aValue: WideString): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsWideString:=TransFormString(aValue);
+end;
+
+function TParamMap.SetParam(P: TParam; aValue: TBytes): Boolean;
+begin
+  Result:=Assigned(P);
+  If Result then
+    P.AsBytes:=aValue;
+end;
+
 constructor TParamMap.Create(AParams: TParams);
 begin
   FParams:=AParams;
@@ -565,6 +692,7 @@ begin
     Result:=F.AsString
   else
     Result:=ADefault;
+  Result:=TransFormString(Result);
 end;
 
 function TFieldMap.GetFromField(F: TField; ADefault: Boolean): Boolean;
@@ -637,6 +765,7 @@ begin
     Result:=F.AsUnicodeString
   else
     Result:=ADefault;
+  Result:=TransFormString(Result);
 end;
 
 function TFieldMap.GetFromField(F: TField; const ADefault: WideString): WideString;
@@ -645,6 +774,7 @@ begin
     Result:=F.AsWideString
   else
     Result:=ADefault;
+  Result:=TransFormString(Result);
 end;
 
 function TFieldMap.GetFromField(F: TField; ADefault: TBytes): TBytes;