2017-01-03 6 views
-1

こんにちは私は "All.OrdAll"フィールドを計算するか、または各入力値に対してFields Ord ..の合計を計算するようにしたいと考えています。実行時にclientdataset(CDS)を作成します。 CDを変更するにはクローズする必要がありますが、クローズすると、計算する必要があるフィールドにアクセスできなくなります。仮想(ftADT)であることに注意してください。 いくつかのコードを参考にしてください。 (FieldDefs.Addを使用して、元の間違った提案から変更)デルファイでClientdatasetの仮想(ftADT)計算フィールドを作成する方法

with cds do 
begin 
Close; 
fieldDefs.Clear; 
FieldDefs.Add('SN',ftInteger); 
FieldDefs.Add('NAME',ftString,40); 
FieldDefs.Add('ALL',ftADT,3); 
FieldDefs.Add('OrdAll',ftFloat); 
FieldDefs.Add('KolAll',ftFloat); 
FieldDefs.Add('MinAll',ftFloat); 

For i:=0 to High(Bases) 
    do begin 
    FieldDefs.Add(Bases[i].Name,ftADT,4); 
    FieldDefs.Add('Price'+IntToStr(Bases[i].SN),ftFloat); 
    FieldDefs.Add('ORD'+IntToStr(Bases[i].SN),ftFloat); 
    FieldDefs.Add('Kol'+IntToStr(Bases[i].SN),ftFloat); 
    FieldDefs.Add('MIN'+IntToStr(Bases[i].SN),ftFloat); 
    end; 
CreateDataSet; 
end; 
cds.close; 
TADTField(cds.FieldByName('All')).Fields.FieldByName('OrdAll'). 
FieldKind:=fkInternalCalc; 
cds.FieldDefs.Update; 
cds.Open; 
+0

を返し、あなたの 'cds'は、ネストされたが含まれていることになっていますデータセット? 'Bases'は何と宣言されていますか? – MartynA

答えて

0

//

// AddfieldDefを使用してみてください、それはTFieldDef

var 
    fieldDef: TFieldDef; 

// 
fieldDef := FieldDefs.AddFieldDef; 
fieldDef.DataType := ftFloat; 
fieldDef.InternalCalcField := true; 
fieldDef.Name := 'OrdAll'; 
+0

[dcc32エラー] RequestU.pas(356):E2010互換性のない型: '整数'および 'プロシージャ、型なしポインタまたは型なしパラメータ' –

+0

これを追加しました:TADTField(cds.Fields [2])。フィールド[0] .FieldKind := fkInternalCalc; get message:引数が範囲外です –

+0

申し訳ありませんが、FieldDefs.Addは値を返しません。私はそれを他のものと混同していた。 AddfieldDefを使用すると、TFieldDef が返されます(今回はコンパイルされたことを確認しました) var fieldDef:TFieldDef; ... fieldDef:= FieldDefs.AddFieldDef; fieldDef.DataType:= ftFloat; fieldDef.InternalCalcField:= true; fieldDef.Name:= 'OrdAll'; –

関連する問題