Midas三层结构中,主从表插入数据的更新!

billy_zh 2002-04-24 08:20:01
应用服务器端:
主表(主键id)由AdoDataSet1检索,
从表(外键pid)由AdoDataSet2检索,
两个数据集建立主从表关系,通过DataSetProvider1(数据集是AdoDataSet1)提供数据。

客户端:
ClientDataSet1连接到DatasetProvider1, 用dbgrid1显示,
ClientDataSet2连接到ClientDataSet1.AdoDataSet2, 用dbgrid2显示,

问题:
如果在dbgrid1(主表)中追加记录(ID为空),
然后在dbgrid2(从表)中追加记录(PID为空),
最后调用ClientDataSet1.ApplyUpdates(0)后。

如果从表的PID允许为空,那么可以更新,但数据就没有关联了,
否则,更新从表时失败。

请教各路高手该怎样解决?

我的想法:
当在主表和从表中插入了关联了记录后,就算把光标移到别处再返回,它们还是保持主从关系,而它们的ID,PID值均为空! 它是靠什么来关联的?正常情况下主从关系应该是都过主键和外键来关联的(猜想的).
...全文
71 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ihihonline 2002-11-01
  • 打赏
  • 举报
回复
www.nxit.net/bbs
有专题讨论,希望你可以看一看;
sunguohua 2002-11-01
  • 打赏
  • 举报
回复
通过在AdoDataSet1,AdoDataSet1中设置关联
或者把代码发给我,我帮你修改一下。sunguohua1@163.net
comanche 2002-11-01
  • 打赏
  • 举报
回复
关联 pid, 也人为写入, 可以在 cds2 的 after insert 中写上 pid field := id field

cds 的主从关系不是通过关联来维护的,因为子表的内容根本就是主表的一个字段(dataset field), 第一条记录子表的内存区都不同(olevariant)

sql server 是通过关联维护主子表关系(foreign key),所以你要在程序上实现这一点
S海鸥 2002-10-31
  • 打赏
  • 举报
回复
1。建议你在后台用触发器trigger来实现,而且效率高。
2。你或者把代码发给我看一下,如果在后台能实现的话,我还是建议你用
触发器 。我的emailaddress : liqsz@21cn.com
softwing 2002-04-24
  • 打赏
  • 举报
回复
ID,PID不允许为空吧。
在BeforePost时可以判断关系嘛

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧