碰到一个问题很难解决:即将数据表的两个字段相除的结果,插入到另外一个表中。
问题是,可能出现除0的情况,这个时候,就会发生EBDEngineError,想捕获除零的错误,可是该怎么做呢?
EBDEngineError.Errors[i]属性没有给出详细的错误指示,想了解错误指示,得到BDE.Pas(或BDE.int)文件中找,可是大海捞针啊,找个大半天,还是不知道所以然。
高手请指教。另外,想让它出错后再处理,纯粹是考虑到算法复杂性问题,因为出错的记录一般就是那么几条,如果一开始就先处理,会经过一系列复杂过程,而且字段很多,这样再插入数据,效率就低了。

解决方案 »

  1.   

    Ms SQL 中:
    with query1 do
    begin
      close;
      SQL.text := 'insert into tableB(field1) select v1/(case v2 
            when 0 then 1
            else v2 
            as v2  from tableA';
      open;
      .... 
    end;
      

  2.   

    除零的错误不应该是EBDEngineError吧,因为那是计算的处理
    一般的错误是edivbyzero or ezerodivide解决上,如果要捕获信息的话,应该是捕获edivbyzero or ezerodivide这两个错误
    当然,你考虑到效率的问题,不想在除之前先判断是否为零也是可以的