况是这样的,我现在做超市前台的POS,我是先把客户端前台POS的单据先保存在本地数据库(因为数据发生非常频繁,不可能用实时提交的方式),然后再从本地数据库读取数据提交给服务端,我现在是用ADOQuery先读取本地数据,然后再用ClientDataSet循环Append,把ADOquery数据导到ClientDataSet,这样就生成了ClientDataSet.Detla,然后再进行提交,但是这样出现了一个问题了,就是已经提交过的数据再提交就会造成重复,如果在数据库设置关键字,如果存在重复的话就所以的数据就不能提交了,如果用循环判断是否已经存在那更行不通了,数据量太庞大了求高手指点一下,怎么解决这一问题,或有更好的办法?

解决方案 »

  1.   

    最简单的方法:
      1:加多一个TDataSetProvider控件,将其指定AdoQuery,然后在AdoQuery.Open之后
         使用TClientDataSet.Data = TDataSetProvider.Data方法即可。这样不会产生日志依你的方法:
      2:你一条一条Append之后(这样效率低,而且麻烦),调用TClientDataSet.MergeChangeLog方
         法合并掉日志
      

  2.   

    TDataSetProvider控件,将其指向AdoQuery
      

  3.   

    谢谢 DreamStrat但是我的主要问题还是没有解决啊,重复提交的话服务器端数据库会多出一条记录
      

  4.   

    To:DreamStrat
    你说的第一种方法,ClientDataSet.Delta 里面没有数据,所以也就没办法添加的,行不通
      

  5.   

    干吗前台不直接用ClientDataSet,连接到中间层,也不用实时提交数据。
      

  6.   

    增加一个标志字段,
    按照 DreamStrat(梦启动的摇篮…) 的做法,query查询后把执行一个SQL,把标志改掉,下次就不出出现重复的了!