Add Calculated Column containing the recno
Add Calculated Column containing the recno
Hi,
did you have a code-sample how to create a calculated column which returns the record number of the result dataset.
It's not an option to change the sql-statement at runtime.
Kind regards
Jens
did you have a code-sample how to create a calculated column which returns the record number of the result dataset.
It's not an option to change the sql-statement at runtime.
Kind regards
Jens
There is an example of creating a field in the runtime:
procedure TForm1.Button1Click(Sender: TObject);
var
field_def: TFieldDef;
field: TField;
begin
OraQuery1.Close;
OraQuery1.FieldDefs.Add('MyCalcField', ftInteger, 0, false);
field_def := OraQuery1.FieldDefs.Items[OraQuery1.FieldDefs.Count - 1];
field := field_def.CreateField(OraQuery1);
field.FieldKind := fkCalculated;
OraQuery1.Open;
end;
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('MyCalcField').AsInteger := DataSet.RecNo;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
field_def: TFieldDef;
field: TField;
begin
OraQuery1.Close;
OraQuery1.FieldDefs.Add('MyCalcField', ftInteger, 0, false);
field_def := OraQuery1.FieldDefs.Items[OraQuery1.FieldDefs.Count - 1];
field := field_def.CreateField(OraQuery1);
field.FieldKind := fkCalculated;
OraQuery1.Open;
end;
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('MyCalcField').AsInteger := DataSet.RecNo;
end;
Hi,
this code is tricky. I would never had created such code.
So problem is, my problem is not not solved.
I've added only one line of code, and there are no design-time fields.
Sadly when the application runs, only the "MyCalcField" exists, no other fields from "ALL_OBJECTS".
Any further hints `?
Kind regards
Jens
this code is tricky. I would never had created such code.
So problem is, my problem is not not solved.
Code: Select all
procedure TForm1.Button1Click(Sender: TObject);
var
field_def: TFieldDef;
field: TField;
begin
OraQuery1.Close;
OraQuery1.Sql.Text := 'SELECT * FROM ALL_OBJECTS';
OraQuery1.FieldDefs.Add('MyCalcField', ftInteger, 0, false);
field_def := OraQuery1.FieldDefs.Items[OraQuery1.FieldDefs.Count - 1];
field := field_def.CreateField(OraQuery1);
field.FieldKind := fkCalculated;
OraQuery1.Open;
end;
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('MyCalcField').AsInteger := DataSet.RecNo;
end;
Sadly when the application runs, only the "MyCalcField" exists, no other fields from "ALL_OBJECTS".
Any further hints `?
Kind regards
Jens
Hello
If you want to add a new column to the existing columns then you should modify your code:
If you want to add a new column to the existing columns then you should modify your code:
Code: Select all
var
i: integer;
field_def: TFieldDef;
field: TField;
begin
OraQuery1.Close;
OraQuery1.Sql.Text := 'SELECT * FROM ALL_OBJECTS';
OraQuery1.Prepare; // Fill OraQuery1.FieldDefs
OraQuery1.FieldDefs.Add('MyCalcField', ftInteger, 0, false);
for i := 0 to OraQuery1.FieldDefs.Count - 1 do
begin
field_def := OraQuery1.FieldDefs.Items[i];
field := field_def.CreateField(OraQuery1);
if field.FieldName = 'MyCalcField' then
field.FieldKind := fkCalculated;
end;
OraQuery1.Open;
end;
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('MyCalcField').AsInteger := DataSet.RecNo;
end;