5

我正在尝试在 TClientDataSet 上的字段上编写 OnValidate 事件,类似于

procedure TForm8.ClientDataSet1MyFieldValidate(Sender: TField);
begin
  if Sender.AsFloat > 30 then
     raise Exception.Create('Too Much!!!');
end;

但是 Sender.AsFloat 始终为 0 - 我如何进行字段级验证(我意识到在这种情况下我可以使用约束或设置 Min/Max 值)

4

3 回答 3

3

这是在 Delphi XE3 中引入的一个错误,这是QC 报告,以及我制作的快速电影以清楚地说明问题。希望这将在下一次更新中得到修复。如果您需要立即修复,QC 页面上的其中一条评论中有一个热修复。

于 2012-11-02T01:01:09.293 回答
1

这在 D2010 上运行良好,区别在哪里......

procedure TForm3.FloatValidate(Sender: TField);
begin
  if sender.AsFloat > 30 then Showmessage('No');

end;

procedure TForm3.Button1Click(Sender: TObject);
begin
   With Clientdataset1 do
    begin
      FieldDefs.add('ID',ftInteger,0);
      FieldDefs.add('Floatfield',ftFloat,0);
      Createdataset;
      Fields[1].OnValidate := FloatValidate;
    end;

end;
于 2012-11-01T08:14:37.127 回答
0

您可能想检查 Sender.NewValue 是否包含您所追求的值。如果客户端数据集上的更新缓存处于活动状态,您可以使用字段的 OldValue、Value 和 NewValue。

于 2012-11-01T22:03:08.237 回答