OnValidate for a TClientDataSet

delphi, tclientdataset, tfield, validation

Solution

This is a bug that has been introduced in Delphi XE3, here is the QC report, and a quick movie I've made to illustrate the problem clearly. Hopefully this will be fixed in the next update. There is a hot fix in one of the comments on the QC page if you need this fixed immediately.

Problem

I'm trying to write an OnValidate event on a field on a TClientDataSet, something along the lines of ``` procedure TForm8.ClientDataSet1MyFieldValidate(Sender: TField); begin if Sender.AsFloat > 30 then raise Exception.Create('Too Much!!!'); end; ``` But Sender.AsFloat is always 0 - how do I do field level validation (I realize in this instance I could use constraints or set Min/Max values)

Original source