123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- unit fieldmap;
- {$mode objfpc}
- {$H+}
- interface
- uses SysUtils, db;
- { ---------------------------------------------------------------------
- TFieldMap
- ---------------------------------------------------------------------}
- type
- EFieldMap = Class(EDatabaseError);
- { TFieldMap }
- TFieldMap = Class(TObject)
- private
- FDataset: TDataset;
- FFreeDataset: Boolean;
- FOldOnOpen : TDataSetNotifyEvent;
- Protected
- Procedure DoOnOpen(Sender : TDataset);
- Function FindField(FN : String) : TField;
- Function FieldByName(FN : String) : TField;
- Public
- Constructor Create(ADataset : TDataset; HookOnOpen : Boolean = False);
- Destructor Destroy; override;
- 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;
- Function GetFromField(F : TField; ADefault : Double) : Double; overload;
- Property Dataset : TDataset Read FDataset;
- Property FreeDataset : Boolean Read FFreeDataset Write FFreeDataset;
- end;
- TFieldMapClass = Class of TFieldMap;
- { 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
- SErrNoDataset = '%s: No dataset available.';
- 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; HookOnOpen : Boolean = False);
- begin
- if (ADataset=Nil) then
- Raise EFieldMap.CreateFmt(SErrNoDataset,[ClassName]);
- FDataset:=ADataset;
- if HookOnOpen then
- begin
- FOldOnOpen:=FDataset.AfterOpen;
- FDataset.AfterOpen:=@DoOnOpen;
- end;
- if FDataset.Active then
- InitFields;
- end;
- destructor TFieldMap.Destroy;
- begin
- if FFreeDataset then
- FreeAndNil(FFreeDataset);
- inherited Destroy;
- end;
- procedure TFieldMap.LoadObject(AObject: TObject);
- begin
- If (AObject=Nil) then
- Raise EFieldMap.CreateFmt(SErrNoObjectToLoad,[ClassName]);
- end;
- function TFieldMap.FieldByName(FN: String): TField;
- begin
- Result:=FDataset.FieldByName(FN)
- end;
- procedure TFieldMap.DoOnOpen(Sender: TDataset);
- begin
- InitFields;
- If Assigned(FOldOnOpen) then
- FOldOnOpen(Sender);
- 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.AsFloat
- else
- Result:=ADefault;
- end;
- function TFieldMap.GetFromField(F: TField; ADefault: Double): Double;
- begin
- If Assigned(F) then
- Result:=F.AsFloat
- else
- Result:=ADefault;
- end;
- end.
-
|