主细表输入与删除的问题(100分)

  • 主题发起人 主题发起人 gxtdlang
  • 开始时间 开始时间
G

gxtdlang

Unregistered / Unconfirmed
GUEST, unregistred user!
主细表输入问题。两个问题100文。(我已是穷光光)
环境:ADO+D6+SQLServer2000
主表(A) Auto Id, DJH GYSDM GYSMC BM ywy
细表(B) Auto1d2 DJH SPDM SPMC SL DJ
主细连接: A.djh=:B.djh
在主细表数据输入时,我先更新主表,后才能向细表中添加多条记录,否则只能添加一条记录。
1》我觉得做法不怎么好,请各位大虾提出输入方式的最佳办法。
2》当向主表添加一条记录后,我又不想向细表添加记录。即细表此时为空,但主表却有了一条
我余的记录。现我想删除主表这条多余的记录。如何实现?
 
1.用数据实现不行吗,试试用事务处理数据吧。
2。在数据库端加一个触发器行不行。
 
1.如果有约束,就只能如此,建议去掉yuesh
2.不明白为什么有多余的数据
 
1.你在主表(A)的onbeforepost事件中检测细表(B)是否存在DJH(即动态建立查询控件查询
细表(B)中是否已输入明细记录,如果存在则主表post,否则Cancel;)
2.你在主表(A)的onafterdelete事件中检测细表(B)是否存在DJH(即动态建立查询控件查询
细表(B)中是否存在相关的明细记录,如果存在则先删除细表,然后再删除主表;如果不存在则直接删除主表))
 
细表里用id1,代替djh
肯定是唯一对应,更改了的话,都对应
然后用级连删除和更新
 
你可以用触发器,当你的明细表中没有ID相联接时就删除.
 
ugvanxk说的有理,建议细表的ID号不要用auto id,因为有时无法保证主从两表的autoid
一定相同。
1>用UpdateBatch
2>直接用语句删除
 
1》我参照李维的书,也用到事务更新。
2》zhanzehua的为什么出现“不明白为什么有多余的数据”
原因是我的程序必须是先向主表添加并更新记录后才能向细表添加记录。当我按《添加》
时,在弹出的商品信息窗体同时已向主表添加一条记录。但此时我又不想向细表添加任何
商品信息,即《取消》退出商品信息窗体返回主细窗体时,主表便出现一条多余的记录。
3》注明一下,主细表的AutoID是自动增加编号。是主键。我如果不这样做,在更新时
会有许多错误提示。
4》级连我还没有试用。稍后便试。
5》我也想过用触发器,但不懂在什么地方触发和如何触发。各位大虾能否提供代码?

我刚学Server2K,多谢你们的指点。


 
1)、使用事务处理,首先判断待插入主表数据的合法性,如果合法,则将A插入主表,然后
将B插入细表,如果中间出现异常,则事务回滚。
2)、delete from A where A.djh not in B.djh(sql语句自己写吧:))
 
TO citybug大虾:
你的方法很好。我的输入过程要求就是要像速达进销存那样。在选择细表(DBGEID)时,
弹出一个可以选择的商品信息窗体。后在商品粮信息窗体中选择商品再《确定》后返回
细表窗体的(DBGRID)输入商品数量。
我觉用事务处理在弹出商品选择窗体时,出现事务断层。你能否把这个事务详细的
说说?
TO:OTHER
继续!
 
》2,用事务处理!
 
天真,怎么个处理,能否说详细点
 
》1,也用事务处理!
adoconnection1.BeginTrans;
try
adoqeury1.sql.text:='insert into .....'
adoquery1.execsql;//更新主表
adoqeury1.sql.text:='insert into 。。。。';
adoquery1.execsql;
更新从表
........
adoconnection1.CommitTrans;
except
adoconnection1.RollbackTrans;
end;
这样就搞定了呀
 
v建议你看看SQL方面的书,论坛里例子也不少,要上班了,只说这么多.
 
天真,我好好想想。先多谢了。
 
再说一下,其实两个都可以用事务处理的,
你先把主从表写在临时表中,但真正要保存时,把数据取出向我上面那样进行提交,
当要清空临时表,再清空,一切就OK了
try....except之间写数据的提交以及ADOCONENCT。COMMITTRANS

 
在对细表进行操作时,只是进行商品选取操作,并没有对数据库进行更改操作,
不会对主、细表更改事务产生影响,
try
f_dm.database1.StartTransaction;
主表合法性判断
主表插入
主表.post;
细表数据录入
细表.post;
f_dm.database1.commit;
except
f_dm.database1.rollback;
end;
 
我不知道大家有没有想过用QUERY的CACHEUPDATE这个属性呢,如何用了它输入起来就方便多了
根本不用考虑这么多问题,将主表我从表的数据全部输入完后,再UPDATE数据就自动进入数库里了
最多是将主表中的单据号更新到从表中就行了
不明白你们怎么想得这么复杂
 
多谢各位大虾。不过问题并没有解决。关于天真大虾说用临时表,我不想用,因为会用到很多临时表。按照citybug大虾, 我是这样做的:
try
f_dm.database1.StartTransaction;
主表合法性判断
主表插入
主表.post;
细表数据录入
细表.post;
主表.BatchUpdate; //********我自已新增,妥否?*********
细表.BatchUpdate; //********我自已新增,妥否?*********
f_dm.database1.commit;
except
f_dm.database1.rollback;
end;


我的主表、细表都设定: 1》 CoursorTupe 属性为 Static
2》LockType 属性为 BatchOptimistic
3》执行的SQL命令都是SELECT

》》》问题是:主表数据能提交,细表不能提交。
如果能把细表的数据保存到SQL数据库里 问题就OK了!如何做?各位。


各位一定要关注我,分少点但请不要嫌弃。
 
后退
顶部