今天CSDN中没有人吗!还是怕不给分!

解决方案 »

  1.   

    to:007pro(等你说爱我) 试过了仍不行!
      

  2.   

    这个问题比较麻烦,你可以参考一下http://www.csdn.net/expert/topic/103/103856.shtm,或者用*change*搜索一下看有没有符合你的情况的帖子。
      

  3.   

      to:hzb(Explorer)
      我看上面对这个问题仍没有解决!不知还有没有办法!
      
      

  4.   

    这是多用户操作引起的问题!或者当你的数据集中的记录不是最新的时候就会有这个问题!
    一定要注意操作次序的问题!我也遇到过类似的情况!还有最好数据库不要使用什么默认值什么的!一定会有问题!我也曾经捆饶过!!
    和你的DB.ApplyUpdates(-1)毫无关系~!
      

  5.   

    解决这个问题有很多方法。
    建议你发送SQL语句到中间层,有中间层的QUERY去提交SQL语句。而且在中间层上还可以实现数据的事务控制。
     可以在中间层写一个供客户调用的接口函数,传入要执行的SQL语句。然后有中间层向数据库提交。我觉得这种方法执行效率要要好些。
      

  6.   

    有这样的机种情况,
    1:在你的客户端浏览时其他的客户端修改了纪录,提交不成功
    2:提交时发生了错误,比如数据库中设置了某些字段不能为空,而提交的纪录中恰巧此字段没有赋值
    3:数据库给某些字段设置了默认值,你提交的纪录中相应字段没有赋值,数据库用默认值修改了。
    4:你是成批的提交数据,必须要保证提交的数据之间没有相关联的,否则关联的纪录先提交了,而后提交的纪录没有更新。
    解决以上问题的方法:每次一个记录一个记录的提交,每次提交后用ClientDataSet.Refresh,刷新,这样可能你会觉得有点慢,但是这是解决此类方法的唯一途径。附加一句:最好所有的与客户端对应的数据元件,比如在RemoteDataModule上的ADOTable,都连接到同一个Connection元件,比如TADOConnection,此方法仅限于编译后的服务端应用程序是独立的Exe,如果是Dll则不行。
      

  7.   

    TDataSetProvider UpdateMode 中尝试 upWhereKeyOnly
      

  8.   

    楼上的 BlueTrees, 在 4中提到的 Refresh 常常是不必要的,如果这时我有个 5000条以上的表 refresh,那不是太不仁道了点,常常我的作法是利用 BeforeXXX AfterXXX 完成数据的同步。
      

  9.   

       to:BlueTrees,  我现在所做是在以前的c/s结构的基础上改造为三层,几乎不存在以上的问题!
       
      

  10.   

    comanche(太可怕) :如果你的客户端要用到这个关键字段,设置TDataSetProvider UpdateMode为upWhereKeyOnly,你如何处理呢?如果表格中还有副索引,并且允许副索引为空,那么客户端能够不设置副索引字段值吗?
      

  11.   

    to lzp():在两层结构中仍然存在与其他客户同步的问题,也存在数据库默认值不能刷新的问题!
      

  12.   

    我是碰到过,用SQL提交就会没事,而ApplyUpdates(0);有时可以,有时不行.如果刷新就太可怕了罢:(,整个效率就...
    看了一下别人的贴,原来还有数据同步的问题啊,又长见识了,谢谢。不过没分:)
      

  13.   

    调用了刷新的方法,难道就一定是要把所有的记录都重新传送一遍吗?调用ADO元件的刷新难道是一定就是把所有的记录都读一遍吗?太小看人家的开发水平了吧!设计Delphi三层结构和设计ADO的人真的这么蠢?他难道不是只更新修改过的记录吗?
      

  14.   

    对不起,我的ado谁品很菜啦,可以说详细码
      

  15.   

    你试试ADOConnection,它是干什么用的?他维护了一个数据库的缓存,再没有提交事务以前,所有的修改都保存在它的缓存中,你试试不同的用户不要使用同一个ADOConnection,即使刷新了,你看他们的修改过的纪录是不是一样!
      

  16.   

    你的服务器配置没有问题吧!我有图示([email protected]
    if ClientDataSet1.ApplyUpdates(0)=0 then
      ShowMSg('保存成功!')
    else
      ShowMsg('不成功!');
    应用程序服务器: DataSetProvider.ResolveToDataSet := True;
                    DataSetProvider.Exported := True;
                    poAllowCommandText := True;
    应该没有问题!                 
      

  17.   

    applyUpdate 的参数0和-1是有区别的:
       0: 在提交时不管别人修改了后台数据都没关系
       -1: 在提交是如果别人修改了数据会有错误返回