mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-08 04:37:49 +02:00
* Initial version of fieldmap
This commit is contained in:
parent
0bc30e88e8
commit
223e553de3
191
packages/fcl-db/fieldmap.pp
Normal file
191
packages/fcl-db/fieldmap.pp
Normal file
@ -0,0 +1,191 @@
|
||||
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.
|
||||
|
Loading…
Reference in New Issue
Block a user