在数据库插入时,报插入重复键错误,问如何屏蔽数据库错误,直接进行
showmessage的报错?
begin
try
   table1.post;
   s:=false;
   except
   on Exception do
   MessageDlg('有非法数据',mtConfirmation,[mbYes,mbNo],0);
   end;
   end;
此方式不行?

解决方案 »

  1.   

    可以呀 不过你需要再脱离IDE方式下执行出现异常后才会出现你得异常提示信息
      

  2.   

    一般是在PostError事件中处理
    procedure TForm1.ADOQuery1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    beginend;
      

  3.   

    在buttonclick事件中
    procedure TForm9.Button4Click(Sender: TObject);
    begin
    if s=true then
    begin
    //try
       table1.post;
       s:=false;
       //except
       //on Exception do
       //MessageDlg('有非法数据',mtConfirmation,[mbYes,mbNo],0);
       //end;
       end;
    form14.query1.Open;
    end;
    在PostError事件中
    procedure TForm9.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    begin
    showmessage('重复!');
    end;
    可还是不行,问错在哪?
      

  4.   

    on Exception do
       MessageDlg(e.message,mtConfirmation,[mbYes,mbNo],0);
       end;
      

  5.   

    其实在IDE下编译也可以的呀!
      

  6.   

    try
      ....
    excepte
      showmessage('出错');
    end;
      

  7.   

    procedure TForm9.Button4Click(Sender: TObject);
    begin
    if s=true then
    begin
    //try
       table1.post;
       s:=false;
       //except
       //on Exception do
       //MessageDlg('有非法数据',mtConfirmation,[mbYes,mbNo],0);
       //end;
       end;
    form14.query1.Open;
    end;procedure TForm9.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    const
    eKeyViol = 9729;
    begin
        if (E is EDBEngineError) then
    if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol  then
        begin
          MessageDlg('出现重复记录!',mtWarning, [mbOK], 0);
          Table1.Cancel;
          Abort;
        end;
    end;
    还是不能屏蔽数据库错误,为什么?