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