关联表的数据修改问题...(200分)

  • 主题发起人 主题发起人 Kent
  • 开始时间 开始时间
K

Kent

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有两个数据表
1.企业代码库

1. CD_CO 企业代码
2. CD_MM_ORNOT 是否是民贸企业
2.统计数据库
.....
3. CD_CO 企业代码
4. CD_MM_ORNOT 是否是民贸企业
...
其中企业代码库和统计数据库是通过CD_CO关联的,企业代码库是主表,
统计数据库是从表,现在有一个问题是;我想让用户在修改企业代码库的
CD_MM_ORNOT时,程序去自动修改统计数据库的相应CD_MM_ORNOT,
但是现在有如下问题;
1. 如何知道用户修改了那条记录呢?
2.这种级联修改处理过程应写在哪里?注意:修改记录才触发,插入不处理.
我用的是ACCESS97,不是C/S数据库,因此不能写触发器什么的,
各位谁遇到过这种情况...

 
请关注...
 
提提前...
 
既然不是 c/s 结构,那就只好在 企业代码库(表)的 Before Post/After Post
写代码了,依你所说,CD_DO 应该是该表的关键字段,那么就用 主表CD_DO的值来查
找从表CD_DO 的值,然后更新,我推荐使用 AfterPost 事件,因为你修改的是主码,可能出现修改后与现有代码重码的情况。参考代码如下,
Query1.Sql.Clear;
Query1.SQL.Add('update subtable set CD_DO =
''''+ Old_CDDO + '''');
Query1.Sql.Add('where CD_DO = '''' + MainTableCD_DO.AsString + '''');
Query1.ExecSql;
 
To Crab:
感谢回贴...
我用的是access97,cd_co是主键,我在数据库一级已经设好了级联修改,
我要改的不是cd_co,而是主表的cd_mm_ornot(不是主键),现在要想使从表
的cd_mm_ornot跟着改....有办法吗?
 
获取当前(需要修改cd_mm_ornot的)记录的cd_co
Query1.Sql.Clear;
Query1.SQL.text:='update 统计数据库 set cd_mm_ornot=select cd_mm_ornot from 企业代码库 where cd_co=:cd_co';
Query1.parambyname('cd_co').asstring:=该记录的cd_co;
Query1.ExecSql;
顺便说一句,这种问题是数据库设计不符合范式的典型例子 :-)
 
对不起,sql少了一个条件,应该是:
Query1.SQL.text:='update 统计数据库 set cd_mm_ornot=(select cd_mm_ornot from 企业代码库 where cd_co=:cd_co)' where cd_co=:cd_co;
 
To 温柔一刀:
我现在就是不知道用户改了哪条记录,所以取不出cd_co的信息...
这样设计是不符合范式要求,但是为了查询统计速度考虑只好这样了...
 
其实你可以将主表的数据设成多字段的主键,把CD_CO和CD_MM_ORNOT设为主键,
然后从表参照这个主键,这样不用编一句代码就可以实现级联删除....
 
问题已解决...
 
后退
顶部