这本来就是Delphi的一个问题。在Delphi的Readme的Known Issues里面,每个版本都这么说。
解决方法:
1、每条主记录就有一对M/D的Query相对应。
2、将Detail的数据统统读入到Query中,不做M/D的连接,而是写程序,主表的记录每发生移动,从表就做一次Filter。

解决方案 »

  1.   

    chechy 兄,又见到你了,真高兴
    能详细一点吗,我有点看不懂,
             谢谢!!
      

  2.   

    第一条详细一点,看不懂第二条中的 filter 速度是不是要慢一点,
    也就是说 detail中的SQL 要写成 SELECT * FROM TABLE_DTL
    要取全部数据,是不是?
      

  3.   

    如果你对m/d都用updatesql控件则可以解决上述问题,但方法笨了一点。
      

  4.   

    to qzg(志刚):
      我用的是 updatesql 呀,怎样解决,能详细一点吗?
      

  5.   

    第二条确实是要这样,Filter的话如果记录不是很多,那么还不错。
    第一条比较笨的,就是每取一条主记录,就需要一对M/D的TQuery(一般都靠动态生成)。如果有主表有10条记录,就意味着有10对M/D的TQuery。够笨吧。
    这两条我都用过。都是传统的两层的解决方案,都不是非常好。
    最好的解决方案是三层架构中的M/D模式。
      

  6.   

    三层结构中的 M/D 不会自动刷新吗?
     三层结构中结构是不是这样    
       服务器  上    M 表                 D 表
                      |                   |
                      |                   |
                      |                   |
     客户机 上   ClientDataset M       ClientDataset D
     这样 如果修改了  ClientDataset M , ClientDataset D 不会刷新吗
    如果不会刷新,那么 移动 ClientDataset M 指针,不是也不会刷新吗?
      

  7.   

    三层结构中,Client表作为主表的一个字段传递给Client。只不过这个字段非常特殊是NestDataset。而能承受NestDataset的控件,在Delphi中只有NestTable(Oracle专用)和TClientDataset。
    结构和你上面的完全不一样。
    服务器:  M表---------D表
              |
              |
              |
    客户端    CDSM--------CDS D
      

  8.   

    三层架构中的
      M/D 模式是在服务器上建立的吧.
      那么移动 ClientDataset M , ClientDataset D 怎么会知道要刷新呢?
      是不是需要手动去刷新?
      

  9.   

    不用,Delphi会替你完成了。你可以看看MIDAS下面的例子。
      

  10.   

    看来我要再去研究一下 三层结构中的 M/D 模式
    非常感谢 chechy,
     谢谢,
     等我研究完后,再来向你提问,能问一下你的 Mail 吗,
    我怕联系不到你
      我的 Mail  [email protected]  QQ 446828谢谢,
      

  11.   

    sina的邮件可以发到China的邮箱里吗?我发到你的邮箱里去。