ADOQuery - DataSetProvider - ClientDataSet 更新数据
插入可以,但始终无法更新,不知为何,请各位帮忙。
客户端DB控件中含有DBEdit、DBLookupComboBox等控件。
我执行:i:=ClientDataSet1.ApplyUpdates(0)发现i=1
后跟踪应用层DataSetProvider 过程OnUpdateError -  E.Message:为“Record not found or changed by another user”。
真的弄不明白了,请各位帮忙,分不够可以加。

解决方案 »

  1.   

    把DataSetProvider的updatemode改为upWhereKeyOnly,试试
      

  2.   

    这是因为在应用服务层TDataSetProvider 生成的Update 语句的where子句是如下:
    field1=oldvalue and field2=oldvalue field3=oldvalue........
    oldvalue是修改前值.
    如果你的所有字段当中有的字段是Mome(或类似的类型)那可能会找不到要更新的数据而出这个错误,你可以控制只根据主键更新:
    1 将TDataSetProvider 的UpdateMode设为:upWhereKeyOnly
    2 在TDataSetProvider的BeforeApplyUpdates事件中写下:
       ADOQuery.FieldByName(主键字段).ProviderFlags:=
             ADOQuery.FieldByName(主键字段).ProviderFlags+[pfInkey];
     
      

  3.   

    查询和改新分开用ClientDataSet,也就是创建两个CDS;
      

  4.   

    怎样扑捉这种提示呢?Record not found or changed by another user"