我在一个项目中创建了两个页和一个DataModule。A页包括一个DataGrid,他的DataSouce指向DataModule中的TDatasource,而TDatasource的dataset指向一个TClientDataSet。A页的OnCreat方法使A页一打开,就显示表C的记录。B页执行向表C插入记录,可我发现,每次用B页执行完插入记录后,再打开A页,不能显示出新记录,只能显示旧记录。重新执行项目,打开A页,则可以显示。
请问何故?在线。

解决方案 »

  1.   

    tabsheet?在切换页面时,更新一下数据,如ONSHOW事件中
      

  2.   

    对不起,是我没表达清楚。是对话框。
    我是在OnCreat中通过ClientdataSet.CommandText打开数据库的,按说对话框每次创建时都应该执行一次,可实际不行。
      

  3.   

    你应该在用过ClientdataSet.CommandText打开数据库之前,先把ClientdataSet关闭再打开,不然它认的是以前的ClientdataSet.CommandText的意思,不会改变,关闭再打开,才会重新打开数据库
      

  4.   

    我是先Close,再设置CommandText,再Open的呀。
      

  5.   

    先CLOSE。再OPEN。clinetdataset1.refresh可是刷新!
      

  6.   

    1. B 页执行插入后,有没有进行 ApplyUpdates?
    2. A 页的 OnCreate 可能只进行了一次。你可以看看它的 OnDestroy 事件执行了几次,如果没有进行 Destroy,则第二次 Show 时,不会 Create 的。如果是这样,在 OnShow 事件中写 ClientDataSet1.Close;ClientDataSet1.Open。
      

  7.   

    可对于Select.....from ...,并不需要ApplyUpdate啊!也就是说,我没有任何插入动作,再次打开查询对话框,未执行任何查询动作,就已经显示了旧信息。按理说,再次打开,应该是等我执行一个点击查询的按钮后才显示结果啊?
      

  8.   

    copy oncreate 到 onshow ,还有 如果有,if dm.adoquery.false then ....=true;
    这句不要,这样,每次打开A的时候应该是正常的了
    有没有applyUpdates ,好像没有上面问题
      

  9.   

    ”copy oncreate 到 onshow“ ,不行啊!没有“if dm.adoquery.false then ....=true;”并且,ADOQuery在Server端,在客户端如何直接操作它?“applyUpdates"只有在Edit或插入状态才能用,对于查询并不需要啊!
      

  10.   

    我的都是copy oncreate 到 onshow的3层中表现层也要有ADOQuery的阿,你做几层的?
      

  11.   

    可对于Select.....from ...,并不需要ApplyUpdate啊!也就是说,我没有任何插入动作,再次打开查询对话框,未执行任何查询动作,就已经显示了旧信息。按理说,再次打开,应该是等我执行一个点击查询的按钮后才显示结果啊?
    =====================如果这样,在 OnClose 时,执行 ClientDataSet1.Close;
      

  12.   

    在 pagecontrol.onchange 事件中调用 onshow  事件
      

  13.   

    闹不清你做的是不是多层结构
    自己提问题时表达清楚,才能得到更好的帮助。B页执行向表C插入记录后,如是多层结构除调用post方法外,还需调用applyUpdates方法上传到服务器
    再打开A页,应该在A页的active 事件重新执行一遍查询,才能显示出新记录,同OnCreate中的一样。
    OnCreate 方法只在对话框初始化的时候,调用一次。