, 나는 내 자신, 그 코드를 생성 DFM 추출물 은 다음과 같습니다. 연산은 자명 한 것이어야합니다. Value
계산 된 필드를 ListBox의 선택된 값으로 설정합니다. 목록 상자의 OnClick 처리기가 ClientDataSet.First
을 호출하는 점은 데이터 집합을 스크롤하게하고 이 해당 OnCalcFields 이벤트를 호출하도록하는 것입니다.
프로젝트는 당신이 주장하는 문제를 나타내지는 않습니다. (무엇이 이 "받아 들여지지 않은"값이라는 것을 정확히 알지 못하지만). ListBox 중 어느 항목이 클릭되었는지에 관계없이 해당 통화 값은 DBEdit 앞에 으로 표시되며 시스템 예외 기호로 표시됩니다. 단, 0.1875 은 기본적으로 값이 2로 반올림되므로 "0.19"로 표시됩니다 소수 자릿수. 내 프로그램은 D7과 D10 시애틀에서 동일하게 작동합니다 (btw.
여러분의 문제를 일으키는 것은 무엇이든간에 여러분의 프로젝트에 여러분이 가지고 있지 않은 것이기 때문에 여러분의 질문에 은 포함되어 있지 않습니다.
코멘트에서 당신은 말했다 :
내가 캘크 버튼을 누르면, 난 그냥 계산 필드 Edit1.text의 값을 할당하고있다.
귀하의 q에있는 코드에 따르면 Button1Click 처리기는 그렇지 않습니다. 이 인 경우 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
당신의 MCVE가 필요합니다. 또한 계산 된 필드를 사용하여 필드 값을 편집 할 수 있도록하는 TDBEdit을 사용하는 이유는 무엇입니까? – MartynA
Calc 버튼을 누르면 계산 필드에 Edit1.text 값이 할당됩니다. 하지만 그것은 0.25, 0.50 ... 등 계산 된 필드를 업데이트하지 않습니다. –