Wo liegt da mein Denkfehler bzw. wann werden die OnChange-Events ausgelöst?
Das passiert im TDataSet.UpdateRecord. Das wird z.B. implizit im Post oder CheckBrowseMode aufgerufen und sorgt dafür, dass alle
DB-aware Controls ihre Daten in den entsprechenden Feldern abspeichern.
Siehe z.B. in TDBCheckBox.UpdateData (das wird dabei nämlich ausgeführt):
Delphi-Quellcode:
procedure TDBCheckBox.UpdateData(Sender: TObject);
var
Pos: Integer;
S: string;
begin
if State = cbGrayed then
FDataLink.Field.Clear
else
if FDataLink.Field.DataType = ftBoolean then
FDataLink.Field.AsBoolean := Checked
else
begin
if Checked then S := FValueCheck else S := FValueUncheck;
Pos := 1;
FDataLink.Field.Text := ExtractFieldName(S, Pos);
end;
end;