delphi 数据库操作删除主键外键有数据,如何不显示冲突提示。因为提示会暴露数据库名和表名,我想把错误提示过滤掉,换成delphi的对话框提示。以前的做法是
1.删除主键是先查询一下外键表有没有数据,如果有就拒绝删除。
2.把主键和外键关系去掉,换成触发器,删除时触发AFTER触发器,在触发器中查询外键表是否存在。这2个办法我都不想用,还有什么更省事的办法吗?
数据库用的是sqlserver

解决方案 »

  1.   

    try..finally..end
    try..except..end
      

  2.   

    楼上的说法不行,我试过了,约束消息会提前发生,在执行except..end之前。
      

  3.   

    try
      AdoQuery1.delete;  // 這裏的只異常只會在下面的EXCEPT中。 不可能跑到別的地方去。除非你截獲了 Application.OnException
    except
      on E : Exception  do 
      raise Exception.create(e.Msg); 
    end;
      

  4.   

    我不能用adoquery的delete方法,用的SQL语句。代码如下: 
      if Not frmDM.aqyCtrtDtl.Active then Exit;
      if frmDM.aqyCtrtDtl.IsEmpty then Exit;
      if application.MessageBox('确实要删除选中记录吗?','提示',mb_yesno+mb_iconquestion)=id_no then Exit;
        with frmDM.ADOdel do
        begin
          close;
          sql.Clear;
          sql.Add('Delete from t_Contract where ID=:aid');
          parameters.ParamByName('aid').Value :=frmDM.aqyCtrtDtl.fieldbyname('ID').AsInteger;
          try
            Execsql;
          except
          on E:exception do
            begin
              application.MessageBox('有业务发生不能删除','提示',0+64);
              Exit;
            end;
          end;
        end;
    执行到  Execsql这句就已经跳出外键约束异常了,根本没执行except里的代码