因新建库前没有建数据完整性?
如果是sql server,建立tigger,
procedure DelRecord(key:String);
begin
aqmaster.sql.clear;
aqdetail.sql.clear;
aqmaster.sql.add('delete from master where pk = ' + key);
aqdetail.sql.add('delete from detail where fk = ' + key);
aqdetail.exescql;
aqmaster.execsql;
end;
上面是cj大虾以前告诉我的,我自己原来是这样做的,不过效率太差:
大商品类别是主表
a:='';
a:=dbedit1.Text;
begin
if application.MessageBox('如果该商品大类型下有商品小类型的数据,将同时删除,继续吗?','警告',MB_YesNo+MB_ICONWARNING)<>ID_Yes
then exit
else //如果选择删除该大类,先在大表里定位,得到要删除的大类型编号,然后在小类型表里,选择出所有的小类型,然后删除小,再删除大。。
begin
x:=DataModuleWork.MGdindata.Locate('stypedesc',a,[]);
if x=true then
begin
b:=datamodulework.MGdindataSTYPEONENO.Value;
with datamodulework.DGdindata do //Dgindata:TADODataset
begin
close;
commandtext:='select * from gdtypetow where stypeone=:c';//c是参数
// unprepare;
parameters.ParamByName('c').value:=b;
// prepare;
open;
end;
if (datamodulework.DGdindata.State<>dsedit) then //www怎么说不能在dsedit下才能delete?
datamodulework.DGdindata.Edit;
datamodulework.DGdindata.First;
while not datamodulework.dGdindata.Eof do
begin
datamodulework.DGdindata.Delete;
datamodulework.dgdindata.Next;
end;
// datamodulework.DGdindata.Post;
if (datamodulework.MGdindata.State<>dsedit) then
datamodulework.MGdindata.Edit;
datamodulework.MGdindata.Delete;
end; //x=true后的begin所属于的end;
end; //else begin
end;//end of