还是这样做吧:先判断是否处于交易中,也许是你在其他地方启动过一个交易
if database1.InTransaction then 
  database1.starttraction;
try
  <对数据库操作>
  database1.commit; 
  except
  on e:exception do
  begin
    database1.rollback;
    //向错误日志中插入一条记录,把错误信息e.message保存
  end;
  end;

解决方案 »

  1.   

     该程序模块中只有一个starttransaction,并且我上面也提到过,对数据库进行其它操作出错时,没有这种现象。例如:sql语句错误,含有无效列名,则触发异常后,数据库回滚,再把这条
    错误消息保存到错误日志中。
     只有给数值字段所赋的值超出字段长度时,才出现这种情况。why!
      

  2.   

    用ADO不会这样。
    用BDE老是这样。