procedure form1.ADOQuery1PostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
   var
   adoErrors : Errors;
   adoError : Error;
   iCount : Integer;
begin
     adoErrors := ADOConnection1.Errors;
     iCount:= adoErrors.Count - 1 ;
     if icount>=0  then
     begin  
        adoError:= adoErrors.Item[iCount];
        listbox1.Items.Add(adoerror.Description);
     end;  
end;如用上面的方法:
当“主关键字出现重复的值”时,可以捕捉到错误的信息(adoerror.Description),并作相应的处理;为什么当“is not a valid date and time(是无效的日期时间)”时,却没有办法捕捉到错误的信息?

解决方案 »

  1.   

    楼上,
    对于“is not a valid date and time(是无效的日期时间)”,
    有没有其它方法可以捕捉得到,或者直接可以进行相应的出错处理?
      

  2.   

    我自己查到了办法:
        编程时,根据系统需求,我们通常需要对用户输入的信息进行有效性验证。你是否曾有过这样的烦恼:根据系统需求,需要在文本框里获取用户输入的日期信息,为此你必须自己编写日期验证函数来验证用户输入的是否为有效日期。而在编写自己的日期验证函数时,除了需要考虑要将月份限制在1~12之间,还要考虑当年各个月份的最大日期(即是除了2月份以外的30天、31天,还是2月份28天、29天)。在此,本文以Delphi为例介绍了一种巧妙利用系统提供的日期转换函数进行日期有效性验证的方法,省却了自己编写日期验证函数的麻烦。
        假设窗体中有一个用于用户输入日期的TEdit类型的控件DateInput,下面所示代码即为对其进行验证的主要部分。    try
        StrToDate (DateInput); //使用日期转换函数
        except
          on E: EConvertError do
          begin
            Application.MessageBox('无效的日期!','提示信息',MB_ICONINFORMATION+MB_OK);
            DateInput.SetFocus;  //将此控件设置为输入焦点,并返回输入窗体
            exit;
          end;
        end;    原理说明:通过使用函数StrToDate,并在转换出错时(即用户输入的日期无效,如1997.17.23)捕获异常信息向用户报错,并将输入焦点置于DateInput控件上。
        如果你是一个好的程序员,相信你一定会举一反三,充分利用开发平台提供的各种函数及功能设计出既能满足需求又短小精悍的程序的。
      

  3.   

    李维的书中不是把ADO Error中的一些源代码改了些吗?