delphi 数据库操作删除主键外键有数据,如何不显示冲突提示。因为提示会暴露数据库名和表名,我想把错误提示过滤掉,换成delphi的对话框提示。以前的做法是
1.删除主键是先查询一下外键表有没有数据,如果有就拒绝删除。
2.把主键和外键关系去掉,换成触发器,删除时触发AFTER触发器,在触发器中查询外键表是否存在。这2个办法我都不想用,还有什么更省事的办法吗?
数据库用的是sqlserver
1.删除主键是先查询一下外键表有没有数据,如果有就拒绝删除。
2.把主键和外键关系去掉,换成触发器,删除时触发AFTER触发器,在触发器中查询外键表是否存在。这2个办法我都不想用,还有什么更省事的办法吗?
数据库用的是sqlserver
try..except..end
AdoQuery1.delete; // 這裏的只異常只會在下面的EXCEPT中。 不可能跑到別的地方去。除非你截獲了 Application.OnException
except
on E : Exception do
raise Exception.create(e.Msg);
end;
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里的代码