如何在删除Master/Detail数据库中的主表数据后自动删除子表中的相关记录/Paradox主-零数据库的子表能不能不要Key(主索引)而工作?(100分)

  • 主题发起人 主题发起人 Sachow
  • 开始时间 开始时间
S

Sachow

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位大侠,Master/Detail表中,在删除Master表中的记录后,
如何编写程序把Detail表中的相关数据删除?
另,我用的是Paradox7的数据库,没有主索引就不会自动维护其它索引,
在增加记录时会出错:“Index is read only”,有没有解决办法?
 
当删除MASTER时同时删除DETAIL就行了?
如: MASTER: TABLE1
DETAIL: TABLE2
M/D: TABLE2.AA=TABLE1.AA
DELETE MASTER时: DELETE TABLE1 WHERE AA='TEST';
同时运行:DELETE TABLE2 WHERE AA='TEST';
另外, 如果已经造成这种结果就可以用这个:
SELECT DISTINCT TABLE2.AA FROM TABLE2 LEFT OUTER JOIN TABLE1 ON
TABLE2.AA=TABLE1.AA AND TABLE1.AA=NULL
查找到已经删除的主表键值, 然后一个一个删除就可以了. (用SQL6.5通过, 不知
PARADOX支持否).
 
自己写程序解决。
 
在主表的BeforeOndelete事件中加入
delete DetailTable where ID=MasterTable('ID');
然后执行它就可以了。
以后每当你从主表删除数据时就会相应的从从表中删除记录。
 
一般是先删除Detail表中的数据,然后再删除Master表中的数据。
 
谢谢各位大侠,我这两天没来得及上网看信息,但我已经自己找到了解决方法,其实思路和大家的一样,就是先删除Detail表中的内容,再删除Master表中的内容,我用的是基于TABLE控件的操作方式,用Locate来找,我看到'cytown'和'delete'君的方案是用Select词句来查找的,你们用的是基于QUERY控件的操作吗?用Select找是不是比用Locate找快?另外,我看到论坛中很多人在做普通操作都是用的QUERY,请问Query是不是比TABLE更好用?最后还有一个问题:我在用Database Desktop创建Paradox数据库时看到帮助文件上说Paradox数据库要避免使用SQL语句,如‘Select,Count',这是为何?望各位不吝赐教!
 
detail表可以不要key, 不过得用query.
完全可以master为个TTable, detail为个TQuery.
detail表如果要用TTable的话一定要有索引.
 
Paradox是支持Table最好的数据库,当然使用Query也可,就是速度略慢。
要是SQL Serve等其它大型数据库处理,还是全用Query为好。
 
SQL Serve、Oracle等大型数据库还是用StoredProc好,当修SQL语句的时候
不用修改程序,另外数据库操作与应用可以分离。
 
这个问题应该用存储过程吧?我以前做过这个,用的是Paradox,也是先删从表,
后删主表,调试时没问题,用户拿去用时,因为有不小心中途断电的现象,造成
整个表(正在操作的)全部乱套,只好手工恢复,现在不时的要往用户哪跑啊,
真累!
不知大虾们有何解决的办法?
 
后退
顶部