主表:
TB1 (PK) ID,
SINFO;
从表:
TB2 (PK) FID,
(FK) ID [TB1的]。
且两个表之间建立了约束。 主表对应: ADOMain【ADOQuery】-->dsMain【DataSource】
ADOMain.DataSource:为空;
从表对应: ADODetail【ADOQuery】-->dsDetail【DataSource】
ADODetail.DataSource:dsMain;ADOMain和ADODetail的LockType设置为:ltBatchOptimistic;提交按钮Button1:
try
adoconn.BeginTrans;
adoMaster.UpdateBatch;
adoDetail.UpdateBatch;
adoconn.CommitTrans;
except
adoconn.RollbackTrans;
end; 在DBEdit1(DataSource:Master,
DataField:ID)
!问题:
a. 为什么?运行程序,必须先POST主表内容,才能添加明细表的内容?
b. 为什么?运行提交按钮Button1,从表的内容一个没留都丢了?
希望明白或做过类似程序的兄弟们帮助。最好有理论结合实际! 很急!
TB1 (PK) ID,
SINFO;
从表:
TB2 (PK) FID,
(FK) ID [TB1的]。
且两个表之间建立了约束。 主表对应: ADOMain【ADOQuery】-->dsMain【DataSource】
ADOMain.DataSource:为空;
从表对应: ADODetail【ADOQuery】-->dsDetail【DataSource】
ADODetail.DataSource:dsMain;ADOMain和ADODetail的LockType设置为:ltBatchOptimistic;提交按钮Button1:
try
adoconn.BeginTrans;
adoMaster.UpdateBatch;
adoDetail.UpdateBatch;
adoconn.CommitTrans;
except
adoconn.RollbackTrans;
end; 在DBEdit1(DataSource:Master,
DataField:ID)
!问题:
a. 为什么?运行程序,必须先POST主表内容,才能添加明细表的内容?
b. 为什么?运行提交按钮Button1,从表的内容一个没留都丢了?
希望明白或做过类似程序的兄弟们帮助。最好有理论结合实际! 很急!
解决方案 »
- 总是提示 filed 'wid' not found
- 我搞了很久也不知道如何解决!高手请告诉我原因何在~,先谢了
- 关于xml中添加节点的问题!
- !!!急!怎么把字符串转换成窗口并让他显示
- 如何将5A转化成Z阿(大写)!
- 各位仁兄,这个问题闲了我一个多星期都不得其解,哪位能帮我解决不胜感激,分不够再加
- 急急急!随机序列生成算法,在线等待,谢谢!
- 比较简单的一个问题,望个位帮帮手,答完就结贴
- 请问DBCOMBOBOX的问题
- 报表问题:我一个表有好多字段。一行无法显示。我如何才能使其得以显示呀!
- jpg 60 错误怎么样捕获
- 奇怪!!!fastreport2.5(Delphi6)的程序在运行预览报表时提示Stack OverFlow,然后就自动关闭
那就是说子表的外键值必须在主表中存在,所以主表提交后,子表才能添加记录。设置了主从关系后,子表记录中的外键值就自动设置了主表的主键值。
先修改程序,先提交主表,然后在提交子表。主要提交主表后不要对主表的记录进行滚动否则提交的子表会添加到其他主表对应的子表记录中。
还有删除主表记录的话,如果数据库两个表的关系中没有设置级联更新或级联删除的话,必须手工删除所有对应子表的记录后才能删除主表记录。
希望你先看看Delphi中主从表的例子。
b、你先UpdateBatch细表,再UpdateBatch主表,试试。我的建议是,如果只用于查询浏览,可以使用VCL的主细表功能;如果涉及到新增、修改、删除,最好自己做,这样容易控制,也很清晰。
try
adoconn.BeginTrans;
adoMaster.UpdateBatch;
adoDetail.UpdateBatch;
adoconn.CommitTrans;
ADODetail.DataSource := dsMain;
except
ADODetail.DataSource := dsMain;
adoconn.RollbackTrans;
end;
这就是例子,当然还有其它的方法。
非常谢谢你给出的代码,经测试通过。50大分预分配给这位大哥了,不过我还有一个大大的问题 :)
不知道哪位大哥能不能帮忙解决一下。
是这样的。我的主表填写完内容以后,必须POST一下才能在从表中添加记录,请问这种问题如何解决呢?我得意思是说我想在主表填完内容后立即填写从表,然后一下子全部提交到数据源。可是现在只能先POST一下,然后才能UpdateBatch;有什么好的办法吗?
能不能给出一段Code? 谢谢了。
如果谁答出问题,觉得给的分数不够,小弟愿意++++++++++++++++++++++++.....
插入正确后将主表刷新下就可以了 requery()
主表和从表的记录先全班记录在内存表中,不要UpdateBatch到数据源;
完成所有操作后才将内存表数据append 到主-从表,UpdateBatch到数据源;