unit fieldmap; interface uses SysUtils,db; { --------------------------------------------------------------------- TFieldMap ---------------------------------------------------------------------} type { TFieldMap } TFieldMap = Class(TObject) private FDataset: TDataset; Protected Function FindField(FN : String) : TField; Function FieldByName(FN : String) : TField; Public Constructor Create(ADataset : TDataset); Procedure InitFields; virtual; abstract; Procedure LoadObject(AObject : TObject); virtual; Function GetFromField(F : TField; ADefault : Integer) : Integer; overload; Function GetFromField(F : TField; ADefault : String) : String; overload; Function GetFromField(F : TField; ADefault : Boolean) : Boolean; overload; Function GetFromField(F : TField; ADefault : TDateTime) : TDateTime; overload; Function GetFromField(F : TField; ADefault : Currency) : Currency; overload; Property Dataset : TDataset Read FDataset; end; { TParamMap } TParamMap = Class(TObject) private FParams: TParams; Protected Function FindParam(FN : String) : TParam; Function ParamByName(FN : String) : TParam; Public Constructor Create(AParams : TParams); Procedure InitParams; virtual; abstract; Procedure SaveObject(AObject : TObject); virtual; abstract; Property Params : TParams Read FParams; end; implementation resourcestring SErrNoDatasetForField = '%s: No dataset to search field "%s".'; SErrNoParamsForParam = '%s: No params to search param "%s".'; SErrNoObjectToLoad = '%s: No object to load'; { TParamMap } function TParamMap.FindParam(FN: String): TParam; begin Result:=FParams.FindParam(FN); {if (Result=Nil) then Writeln(ClassName,' param ',FN,' not found');} end; function TParamMap.ParamByName(FN: String): TParam; begin If (FParams=Nil) then Raise Exception.CreateFmt(SErrNoParamsForParam,[ClassName,FN]); Result:=FParams.ParamByName(FN); end; constructor TParamMap.Create(AParams: TParams); begin FParams:=AParams; InitParams; end; { TFieldMap } constructor TFieldMap.Create(ADataset: TDataset); begin FDataset:=ADataset; InitFields; end; procedure TFieldMap.LoadObject(AObject: TObject); begin If (AObject=Nil) then Raise Exception.CreateFmt(SErrNoObjectToLoad,[ClassName]); end; function TFieldMap.FieldByName(FN: String): TField; begin If (FDataset=Nil) then begin Raise Exception.CreateFmt(SErrNoDatasetForField,[ClassName,FN]); result := nil; end else Result:=FDataset.FieldByName(FN); end; function TFieldMap.FindField(FN: String): TField; begin If (FDataset=Nil) then Result:=Nil else Result:=FDataset.FindField(FN); end; function TFieldMap.GetFromField(F: TField; ADefault: Integer): Integer; begin If Assigned(F) then Result:=F.AsInteger else Result:=ADefault; end; function TFieldMap.GetFromField(F: TField; ADefault: String): String; begin If Assigned(F) then Result:=F.AsString else Result:=ADefault; end; function TFieldMap.GetFromField(F: TField; ADefault: Boolean): Boolean; begin If Assigned(F) then begin if (F is TStringField) then Result:=(F.AsString='+') else Result:=F.AsBoolean end else Result:=ADefault; end; function TFieldMap.GetFromField(F: TField; ADefault: TDateTime): TDateTime; begin If Assigned(F) then Result:=F.AsDateTime else Result:=ADefault; end; function TFieldMap.GetFromField(F: TField; ADefault: Currency): Currency; begin If Assigned(F) then Result:=F.AsCurrency else Result:=ADefault; end; end.