使用公文包模式
clientdataset.filename='filename'
在使用clientdataset.applyupdate(-1)时,报上述错误
但是查看数据库中,记录已经被保存.,但在fielname.cds中没有记录

解决方案 »

  1.   

    你可以将TDATAPROVIDER的提交属性设置为(UPDATEMODE)upWhereKeyOnly主健更新模式!!
      

  2.   

    我已经设成upwherekeyonly模式了.还是不得
    有没有高手真正能解决这个问题.
    关键是:有时行,有时不行,
      

  3.   

    关键是你在TQUERY(TADOQUERY)中设置主健没?(因为UPWHEREKEYONLY类型最好要在 TQUERY(TADOQUERY)建立静态字段,同时要设置主健)
      

  4.   

    请看一下李维的书"DELPHI 5.X分布式多层应用系统篇"
    里面讲得很清楚
    更新时要判断服务器中的记录是不是已经被另一用户更新了
    1 如果没被更新(你的程序就没问题)
    2 如果被更新:又有二种情况
      1)主键被更新,将找不到该记录
      2)其它字段被更新,可以找到,但你要设定几种处理方式要用到DATA和DELTA属性,书中讲得再清楚不过了
    你的问题是根本没考虑到这一层.
      

  5.   

    同意: Erice(白雪公猪) (
    需要动态增加KEY,
    AdoQuery.FieldByName(sFieldName).ProviderFlags := [pfInUpdate, pfInWhere, pfInKey]
    另外,如果用所有字段更新,可以查一下字段中有没有DATETIME类型的字段,这类字段在传递过程中会去掉分以后值,也会找不到记录更新,如果有改成SMALLDATETIME。
      

  6.   

    欢迎大家加入DELPHI程序员群1805366 ,一起交流技术!
      

  7.   

    看看数据表中有无bigint字段,改成int