Bug with fkCalculated fields
Original Reporter info from Mantis: s73
-
Reporter name: Vladimir K
Original Reporter info from Mantis: s73
- Reporter name: Vladimir K
Description:
First issue in fields.inc that leads to wrong FDefaultFields value:
procedure TFields.Changed;
begin
if (FDataSet <> nil) and not (csDestroying in FDataSet.ComponentState) and FDataset.Active then
FDataSet.DataEvent(deFieldListChange, 0);
FDataset.Active (absent in Delphi 6-7) check prevents call of FDataSet.DataEvent while DataSet not active yet, like
Query := CreateDataSet('query', 'Select ' + FieldName + ' From ' + TableName, Null) as TCustomDADataSet;
try
Query.Prepare;
Query.FieldDefs.Add('MyCalcField', ftInteger, 0, False);
for i := 0 to Query.FieldDefs.Count - 1 do
begin
FieldDef := Query.FieldDefs.Items[i];
Field := FieldDef.CreateField(Query); <- from here through Result.Dataset:=TFieldDefs(Collection).Dataset
if Field.FieldName = 'MyCalcField' then
Field.FieldKind := fkCalculated;
end;
Query.OnCalcFields := OnCalcFields;
try
Query.Open;
Another issue:
procedure TDataSet.DoInternalOpen;
begin
FDefaultFields := FieldCount = 0; <- missing in FPC, exists in Delphi 7
InternalOpen;
Steps to reproduce:
UniDAC ASE Direct components used.
Additional information:
First fix (fields.inc):
procedure TFields.Changed;
begin
if (FDataSet <> nil) and not (csDestroying in FDataSet.ComponentState) then
FDataSet.DataEvent(deFieldListChange, 0);
Second (dataset.inc):
procedure TDataSet.DoInternalOpen;
begin
FDefaultFields := FieldCount = 0;
InternalOpen;
Mantis conversion info:
- Mantis ID: 30954
- OS: Windows
- OS Build: 10
- Build: Lazarus 1.7
- Platform: 64
- Version: 3.0.1
- Fixed in version: 3.1.1
- Fixed in revision: 39022 (#8384dc7c)
- Target version: 3.2.0