CommandText := 'delete from 主表 where Frdm=''' + frdm + ''''; //在这个地方可以执行SQL,如果出错,还要事务回滚 .... CommandText := 'delete from 从表1 where Frmdm=''' + frdm + ''''; .... SysADOConnection.CommitTrans;
to lynmison : 在BDE中可不可以实现类似的操作?
用ADO组件,创建视图,修改后提交,由ADO“自动”更新视图相关的所有表。
用ADO建表时,可以选择“实施参照完整性”
使用SQL DBMS建议使用触发器,在服务器端执行速度要快,安全性要好. create trigger trigger on tablename for delete as delete from table1 where table1.column=deleted.keycolumn delete from table2 where table2.column=deleted.keycolumn
2、如果支持触发器的,那么你可以在数据库中编写触发器,当删除as delete 法人代码的时候,删除其他表中的纪录
3、或者干脆就首先删除其他8个表中对应的子纪录,然后再删除主表的这条纪录
为tb_dwxx建立删除触发器,在触发器代码中简单删除从表相关记录即可2. 对Local File 数据库
同意kesa的观点
如:
ALTER TABLE T_Detail
ADD FOREIGN KEY (FieldName)
REFERENCES T_Master
ON DELETE CASCADE
ON UPDATE RESTRICT;
就可以了,删除主表的一条记录的时候,对应的明细也给删除了或者在程序里面写SQL语句来实现,既然有关联字段,就好写SQL了,很简单的
SysADOConnection.BeginTrans
CommandText := 'delete from 主表 where Frdm=''' + frdm + '''';
//在这个地方可以执行SQL,如果出错,还要事务回滚
....
CommandText := 'delete from 从表1 where Frmdm=''' + frdm + '''';
.... SysADOConnection.CommitTrans;
用ADO组件,创建视图,修改后提交,由ADO“自动”更新视图相关的所有表。
create trigger trigger on tablename for delete
as
delete from table1 where table1.column=deleted.keycolumn
delete from table2 where table2.column=deleted.keycolumn
如果你用的是Access,或 .DBF,就用BDE的事务处理,如:
开始事务
删除第一个子表中要删除的资料;
删除第一个子表中要删除的资料;
删除主表中要删除的资料
提交事务/或不成功回滚事务