2017-01-03 1 views
-1

Привет, я хочу, чтобы поле «All.OrdAll» рассчитано или внутренне рассчитано, которое будет суммировать поля Ord .. для каждого входного значения. Я делаю clientdataset (CDS) во время выполнения. Чтобы внести изменения в компакт-диски, я должен закрыть их, но если я закрою его, я потеряю доступ к полю, которое мне нужно сделать. Обратите внимание, что он виртуальный (ftADT). Пожалуйста, помогите с некоторым кодом.Как сделать расчетное поле, которое является виртуальным (ftADT) для Clientdataset в Delphi

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' содержит вложенный набор данных? Что такое «Базы», ​​объявленные как? – MartynA

ответ

0

// (модифицированный из исходных некорректных предложений с использованием FieldDefs.Add)

// Попробуйте использовать 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; но получить сообщение: Аргумент за пределами допустимого диапазона –

+0

К сожалению, FieldDefs.Add не возвращает значение. Я смутил его чем-то другим. Попробуйте использовать AddfieldDef, он возвращает TFieldDef (на этот раз я проверил, что он скомпилируется) var fieldDef: TFieldDef; ... fieldDef: = FieldDefs.AddFieldDef; fieldDef.DataType: = ftFloat; fieldDef.InternalCalcField: = true; fieldDef.Name: = 'OrdAll'; –

Смежные вопросы