是KEY VIOLATION错误吗?
我也很烦这个,一起探讨
1、给用户操作加限制,限制约严格,出错可能性越小。并把用户所有可能的操作都做条件限制(包括错误操作),有错就ShowMessage('相应错误'),
方法很繁琐,考虑条件多,实现简单
2、使用一外部或技术得到错误句柄,然后进入我们自己的出错处理程序。
fouction DBError(DataSet:TDataSet;E:EDatabaseError;Var Action:TDataAction);
const
   ekeyviol=9729;//谁告诉我什么意思?为什么是9729
var
   iDBIError:Integer;
begin 
  if (E is EDBEngineError) then
  begin
    IDBIError:=(E as EDBEngneError).Errors[0].Errorcode;
    case  IDBError of
    ekeyviol;
      begin
        MessageDlg('主键重复'),mtWARNING,[MBol],0);
        Abort;
     end;
  end;调用:procedure TMainForm.Table1EditError(DataSet:TDataSet E:EDatabasseError; VarAction: TDataAction);
      begin
        DBError(Tablel,E,Action);
      end;由于只是从我的笔记照原样再打下来的,难免有疏漏的地方,见谅!
请高手指正!

解决方案 »

  1.   

    9729应该是错误代号,就象在SQLSERVER中一样,错误有代号,级别
    我想在SQLSERVER的触发器中作这些事情啊,而不是在DELPHI的应用程序中做。
      

  2.   

    我用的是access的库和oracle的库,应该怎么做
      

  3.   

    好象在delphi属性设置里面可以做到这点。你再仔细找找看!
      

  4.   

    在mainform上放一个 TApplicationEvents,在它的OnExcetion(Sender: TObject;E: Exception)中写代码, 它可以捕获程序中的所有错误,
    E.message是错误的提示信息,一个简单的办法是,用字符替换将它转化为中文, 而后弹出自己的错误窗体或不弹,系统缺省得窗体就不会出现了。
      

  5.   

    halo_hell(死亡阴影) ,你好
    能说具体点吗?拜托啊,老大
      

  6.   

    try 
      可能出错误得地方
    except 
      showmessage('您的操作出现了错误!!!');
    end;
    把系统的异常屏蔽掉,改为自己的错误信息