Как вы не предоставили MCVE, я создал сам, и его код и экстракт DFM приведены ниже. Его работа должна быть само собой разумеющейся - она устанавливает Value
вычисленное поле выбранному значению в ListBox. Точка обработчика OnClick ListBox ListBox, вызывающая ClientDataSet.First
, должна вызвать прокрутку набора данных и поэтому вызывать событие OnCalcFields.
В проекте НЕ проявляется проблема, которую вы утверждаете (хотя неясно, что именно именно вы подразумеваете под значением, которое не принимается). Какой бы элемент в элементе ListBox не был нажат, соответствующее значение валюты отображается в DBEdit, предшествующем символом корреляции системы, единственным исключением является то, что 0,1875 отображается как «0,19», потому что по умолчанию значение округляется до двух десятичные разряды. Моя программа работает одинаково в D7 и D10 Сиэтле, кстати.
Итак, что бы ни вызывало вашу проблему, в вашем проекте есть что-то, что у вас нет , включенных в ваш q, который показывает, если ничего больше не значение MCVE.
В комментарии вы сказали:
При нажатии кнопки Calc, я просто назначая значение Edit1.Text расчетной области.
Ну, это не то, что делает ваш обработчик Button1Click, в соответствии с кодом в вашем q. Если вы : присваиваете значение вычисленному полю в любом месте, кроме события OnCalcFields, вы должны проверить, что ваш набор данных находится в соответствующем State
(TDataSetState
), прежде чем вы это сделаете. Ты?
Код:
type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBEdit1: TDBEdit;
ClientDataSet1ID: TIntegerField;
ClientDataSet1Value: TCurrencyField;
ListBox1: TListBox;
procedure ClientDataSet1CalcFields(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
public
end;
[...]
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
ClientDataSet1.FieldByName('Value').AsString := ListBox1.Items[ListBox1.ItemIndex];
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.ItemIndex := 0;
ClientDataSet1.CreateDataSet;
ClientDataSet1.InsertRecord([1]);
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
ClientDataSet1.First;
end;
DFM экстракт
object DBEdit1: TDBEdit
DataField = 'Value'
DataSource = DataSource1
end
object ListBox1: TListBox
Items.Strings = (
'0'
'0.1875'
'0.25'
'0.50'
'0.75'
'1.0')
OnClick = ListBox1Click
end
object ClientDataSet1: TClientDataSet
Aggregates = <>
Params = <>
OnCalcFields = ClientDataSet1CalcFields
object ClientDataSet1ID: TIntegerField
FieldName = 'ID'
end
object ClientDataSet1Value: TCurrencyField
FieldKind = fkCalculated
FieldName = 'Value'
Calculated = True
end
end
object DataSource1: TDataSource
DataSet = ClientDataSet1
end
Вы должны вывесить тип поля и то, что SQL заполняется набор данных. – RBA
Ваш q нуждается в MCVE. Кроме того, почему вы используете TDBEdit, который позволяет редактировать значение поля, с вычисленным полем? – MartynA
Когда я нажимаю кнопку Calc, я просто назначаю значение Edit1.text для вычисленного поля. Но это не обновление расчетного поля для 0,25, 0,50 ... и т. Д. –