procedure tform1.button1click(sender:TObject);
begin
  try
    dataset1.post;
    adoconnetion1.CommitTrans;
  except
    showmessage('error');
    adoconnection1.RollbackTrans;
  end;
end;

解决方案 »

  1.   

    楼上的方法可行
    好像忘记一句:
    ADOCONNECTION1.BEGINTRANS;
      

  2.   

    try
        AdoDataset.Post;
    execept
        // 弹出你自己的信息框
        Exit;
    end;
      

  3.   

    我不知道这是不是ADO的一个BUG
    详细请参阅:李维<Delphi 5.X ADO_MTS_COM+高级程序设计篇>
    第三章,第5小节最后部分!因文字陈述过多,恕不原文摘抄!
      

  4.   

    非也,呵呵,不是ado的bug
    你可以自己写一个错误处理机制,其实楼上的各位所学的,系统的错误提示还会出来
      

  5.   

    在出错的地方写自己的处理:

    DataSetPostError:
    if EDBEngineError(E).Errors[0].ErrorCode='BDE-***' then
      ......
      

  6.   

    谢谢大家!
    >>try
    >>    AdoDataset.Post;
    在DBGrid中它是自动Post的(比如说我换到另一行),好像不能这样。>>你可以自己写一个错误处理机制,其实楼上的各位所学的,系统的错误提示还会出来
    该怎么写错误处理呢?关键是在哪捕获错误呢???
      

  7.   

    在会出错的地方,如DataSetPostError加上自己的处理:
    如:
    在DataSetPostError事件中
    if EDBEngineError(E).Errors[0].ErrorCode='BDE-****' then
       ........
      

  8.   

    try
        ...;
    catch (exeception e) begin
        // 弹出你自己的信息框
    end;
    没关系,依然会跳出很不友好的出错对话框,但是这是你在调试状态下(就是Delphi的run),如果你在资源管理器里运行你的应用程序,你试试看...^_^
      

  9.   

    OnPostError ()
    begin
      try
        Post;
      except
        On:E.ErrorCode = -3434234234 then 
          begin
            showmessage('关键字冲突!');
            exit;//Abort;
          end;
      end;
    end;
    {
    好象ADO类没有ErrorCode属性吧?我记得以前是用类型强制转换方式处理这个问题的。关于E.ErrorCode值是多少么?纯属经验学范畴。呵呵。。
    }