现在碰到了一个较困惑的问题,提出来与各位高手讨论一下。
  数据库里有一个时间字段,对应客户端数据集
clientdataset里birthday存放此字段(即birthday为时间类型的TField),dbedit1与该
字段关联。向数据库
增加一条纪录,在dbedit1中输入时间后,为了防止用户输入2002-2-30之类的非法时间
,我在dbedit1的onexit事件中用一个异常处理拦截,代码如下:
procedure Tfmckcd.DBEdit1Exit(Sender: TObject);
begin
if dbedit1.text<>'' then
try
strtodate(dbedit1.text);
except
on E:EConvertError  do
begin
messagedlg('非法日期',mtinformation,[mbOK],0);
dbedit1.setfocus;
end;end;end;
但该异常总不能拦截到,总是报错:project raised
exception  class EConvertError with message ''2002-2-30'' is not a valid date.系统总是先报错,然后才触发except后面的事件。    
我在birthday字段对象的onsetText和OnValiDate事件中触发该事件,也不能成功。
前面有人说是要把那个Stop on Delphi Exceptions关掉。不知道这个开关在哪儿?另外
,我估计不是这个问题,可能是delphi处理数据感知组件的一种方式:首先执行将dbed
it里的数据写入缓冲,在执行onexit事件?查了帮助,发现Tfield的OnValiData事件是在数据写入buffer之前
触发的(Occurs just before the data is written to the record buffer.)
那这个问题真是更复杂了