Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>If you have know your to be calculated fields names at runtime, you can use something like that. </p> <pre><code>var initing:boolean; procedure TSampleForm.dsSampleAfterOpen( DataSet: TDataSet); var i:integer; dmp:tfield; begin if not initing then try initing:=true; dataset.active:=false; dataset.FieldDefs.Update; for i:=0 to dataset.FieldDefs.Count-1 do begin dmp:=DataSet.FieldDefs.Items[i].FieldClass.Create(self); dmp.FieldName:=DataSet.FieldDefs.Items[i].DisplayName; dmp.DataSet:=dataset; if (dmp.fieldname='txtState') or (dmp.FieldName='txtOldState') then begin dmp.Calculated:=true; dmp.DisplayWidth:=255; dmp.size:=255; end; end; dataset.active:=true; finally initing:=false; end; end; procedure TSampleForm.dsSampleAfterClose( DataSet: TDataSet); var i:integer; dmp:TField; begin if not initing then begin for i:=DataSet.FieldCount-1 downto 0 do begin dmp:=pointer(DataSet.Fields.Fields[i]); DataSet.Fields.Fields[i].DataSet:=nil; freeandnil(dmp); end; DataSet.FieldDefs.Clear; end; end; procedure TSampleForm.dsSampleCalcFields( DataSet: TDataSet); var tmpdurum,tmpOldDurum:integer; begin if not initing then begin tmpDurum := dataset.FieldByName( 'state' ).AsInteger; tmpOldDurum:= dataset.FieldByName( 'oldstate' ).AsInteger; dataset.FieldByName( 'txtState' ).AsString := State2Text(tmpDurum); dataset.FieldByName( 'txtOldState' ).AsString := State2Text(tmpOldDurum); end; end; procedure TSampleForm.btnOpenClick(Sender: TObject); begin if dsSample.Active then dsSample.Close; dsSample.SQL.text:='select id,state,oldstate,"" as txtState,"" as txtOldState from states where active=1'; dsSample.Open; end; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload