用ADO建立主从表关系,主表数据输入采用编辑框,从表数据输入采用DBGrid
,为了实现事务,主表和从表的提交模式都为“批次提交”
我的问题是:当主表新增一条记录的时候,如果不特意的POST主表的记录,那么
在从表关联的DBGRID中,任何时候都只能看到从表中的当前的那一条记录,就算
从表中已经添加了很多条,也只能看到当前的那一条,如果将主表的记录POST那么,所有的
从表记录才会列示出来,但是我觉得这样很不方便,有没有好的解决方案

解决方案 »

  1.   

    因为如果主表中的记录没有post,那么主表中是还没有添加记录的,从表中当然看不到了。所以每次都是指向当前的那条记录了。
      

  2.   

    从表中不是看不到,而是只能看到一条,如果主表POST就能够看到所有的从表记录
    因为我要把主从表的提交写入自己的控件,所以需要解决这个问题
      

  3.   

    是的阿,只能看到你当前的一条,因为你的主表没有post,那麽当你再在主表中输入时,从表是照不到你前面输入的主表的信息,当然看不到了,所以主表必须要post,找一个合适的地方post是关键。
      

  4.   

    你只要将两个对应的数据控件设置为主从关系,程序代码来关闭从表DBGRID的数据集,在主表POST后再显示从表的数据并进行添加!
      

  5.   

    你可以在insert以后把mastersource和masterfield去掉然后
    filtered=true,filter='id=xxxx',保存以后将mastersource和masterfield加回去
    试试吧一定行的
      

  6.   

    同意!你可以用STRINGGRID用代码控制
      

  7.   

    用我的方法包你满意procedure TForm1.adsDetailBeforeInsert(DataSet: TDataSet);
    begin
      adsMaster.CheckBrowseMode;
    end;procedure TForm1.adsDetailNewRecord(DataSet: TDataSet);
    begin
      adsDetail.FieldByName('PrimatyKey').AsInteger := FieldByName('PrimatyKey').AsInteger;
    end;
      

  8.   

    dwgz这样做,如果用批更新模式的话,取消出现问题??
      

  9.   

    post之后,取最后一条记录不是ok拉
      

  10.   

    其实你在POST之后在重新根据条件打开从表的数据不就可以了吗?
      

  11.   


    在从表的OnNewRecord事件中写:
    adsDetail.FieldByName('DJ_ID').AsInteger :=adsMaster.FieldByName('DJ_ID').AsInteger;
      

  12.   

    我一直迴避這個問題,所以不把兩個數據集關聯起來。而是在select語句中通過條件來體現它們的主從關係。
      

  13.   

    to suton(suton) 
    me也是。
      

  14.   

    用先更新主表,然后更新从表,这样从表才会得到主表与之关联的ID。
    用了缓存,如果先更新从表的话,从表就找不到于主表的关联的ID,因为主表的iD还在缓存中