应用服务器端:
    主表(主键id)由AdoDataSet1检索,
    从表(外键pid)由AdoDataSet2检索,
    两个数据集建立主从表关系,通过DataSetProvider1(数据集是AdoDataSet1)提供数据。客户端:
   ClientDataSet1连接到DatasetProvider1, 用dbgrid1显示,
   ClientDataSet2连接到ClientDataSet1.AdoDataSet2, 用dbgrid2显示,问题:
   如果在dbgrid1(主表)中追加记录(ID为空), 
   然后在dbgrid2(从表)中追加记录(PID为空),
   最后调用ClientDataSet1.ApplyUpdates(0)后。   如果从表的PID允许为空,那么可以更新,但数据就没有关联了,
   否则,更新从表时失败。   请教各路高手该怎样解决?我的想法:
   当在主表和从表中插入了关联了记录后,就算把光标移到别处再返回,它们还是保持主从关系,而它们的ID,PID值均为空! 它是靠什么来关联的?正常情况下主从关系应该是都过主键和外键来关联的(猜想的).

解决方案 »

  1.   

    ID,PID不允许为空吧。
    在BeforePost时可以判断关系嘛
      

  2.   

    1。建议你在后台用触发器trigger来实现,而且效率高。
    2。你或者把代码发给我看一下,如果在后台能实现的话,我还是建议你用
      触发器 。我的emailaddress : [email protected] 
      

  3.   

    通过在AdoDataSet1,AdoDataSet1中设置关联
    或者把代码发给我,我帮你修改一下。[email protected]
      

  4.   

    www.nxit.net/bbs
    有专题讨论,希望你可以看一看;
      

  5.   

    关联 pid, 也人为写入, 可以在 cds2 的 after insert 中写上 pid field := id fieldcds 的主从关系不是通过关联来维护的,因为子表的内容根本就是主表的一个字段(dataset field), 第一条记录子表的内存区都不同(olevariant)sql server 是通过关联维护主子表关系(foreign key),所以你要在程序上实现这一点