mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-03 04:10:19 +02:00
fcl-db: bufdataset: add limited support for ftBCD fields in filter parser.
As DBF filter/expression parser does not support etBCD type of expression, I have used etFloat type, so I convert currency data type to double data type. (which can lead in some cases in false results, when currency can not be expressed as double, without loss of precision) git-svn-id: trunk@32558 -
This commit is contained in:
parent
11dd843f77
commit
e0ee5c30bf
@ -143,6 +143,12 @@ type
|
||||
procedure Refresh(Buffer: TRecordBuffer); override;
|
||||
end;
|
||||
|
||||
TBCDFieldVar = class(TFloatFieldVar)
|
||||
public
|
||||
procedure Refresh(Buffer: TRecordBuffer); override;
|
||||
end;
|
||||
|
||||
|
||||
//--TFieldVar----------------------------------------------------------------
|
||||
constructor TFieldVar.Create(UseField: TField);
|
||||
begin
|
||||
@ -273,6 +279,16 @@ begin
|
||||
FFieldVal := False;
|
||||
end;
|
||||
|
||||
procedure TBCDFieldVar.Refresh(Buffer: TRecordBuffer);
|
||||
var c: currency;
|
||||
begin
|
||||
if FField.DataSet.GetFieldData(FField,@c) then
|
||||
FFieldVal := c
|
||||
else
|
||||
FFieldVal := 0;
|
||||
end;
|
||||
|
||||
|
||||
//--TBufDatasetParser---------------------------------------------------------------
|
||||
|
||||
constructor TBufDatasetParser.Create(Adataset: TDataSet);
|
||||
@ -387,7 +403,7 @@ begin
|
||||
TempFieldVar := TFloatFieldVar.Create(FieldInfo);
|
||||
TempFieldVar.FExprWord := DefineFloatVariable(VarName, TempFieldVar.FieldVal);
|
||||
end;
|
||||
ftAutoInc, ftInteger, ftSmallInt:
|
||||
ftAutoInc, ftInteger, ftSmallInt, ftWord:
|
||||
begin
|
||||
TempFieldVar := TIntegerFieldVar.Create(FieldInfo);
|
||||
TempFieldVar.FExprWord := DefineIntegerVariable(VarName, TempFieldVar.FieldVal);
|
||||
@ -402,6 +418,11 @@ begin
|
||||
TempFieldVar := TDateTimeFieldVar.Create(FieldInfo);
|
||||
TempFieldVar.FExprWord := DefineDateTimeVariable(VarName, TempFieldVar.FieldVal);
|
||||
end;
|
||||
ftBCD:
|
||||
begin
|
||||
TempFieldVar := TBCDFieldVar.Create(FieldInfo);
|
||||
TempFieldVar.FExprWord := DefineFloatVariable(VarName, TempFieldVar.FieldVal);
|
||||
end;
|
||||
else
|
||||
raise EDatabaseError.CreateFmt(SErrIndexBasedOnInvField, [VarName,Fieldtypenames[FieldInfo.DataType]]);
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user