現在遠程數據模板中放置,一個ADOConnection,並連接數據庫,再放置3個AdoQuery.分別為:Q1、Q2、Q3.其中各表的關系為:Q1是Q2的主表通過ID和PID相關聯。Q2是Q3的主表,通過ITEM_CODE=ITEM_CODE and ID=PID 相連。並放置一個DataSetProvider1並連接Q1。
在客戶端中放置3個TClientDataset 分別為C1、C2、C3,其中C1是通過Provider連接DataSetProvider1。C2和C3通過DataSetField來連接Q2和Q3。
在顯示數據及在新增數據,三個表都新增時再保存不會出錯。
問:1)當調出新增的資料出來,隻修改C2中的資料然後再保存就會出錯:"Record Not Found or Changed by another user"但表卻隻有當前用戶在用。
      之後還出現了(Unable to Find Record No Key Specified)
    2)若隻刪除C3的資料時也會出現以上錯誤。語句為:
if not C3.isempty then 
begin
C3.first ;
while not C3.eof do 
begin 
C3.delete ; 
C3.next ;
end ;
end ;
if C3.changeCount > 0 then 
C3.ApplyUpdates(-1)
請問為什麼??

解决方案 »

  1.   

    C3.Delete 后请加一句C3.ApplyUPdates(0);即可以了!!
      

  2.   

    if not C3.isempty then 
    begin
       C3.first ;
       while not C3.eof do 
       begin 
          C3.delete ; 
          C3.next ;  //这一句是多余的,Delete执行完后自动下移
       end ;
    end ;
    if C3.changeCount > 0 then 
       C3.ApplyUpdates(-1);
      

  3.   

    if C3.changeCount > 0 then //这一句也是多余的,ApplyUpdates自动提交有更改的字段值
       C3.ApplyUpdates(-1);
      

  4.   

    你服务端的TDataSetProvider使用的UpdateMode可能时默认的upWhereAll,应该使用upWhereKeyOnly,并且在TADOQuery的TFieldList中,将是主关键字的字段设置ProviderFlags.pfInKey为True.
      

  5.   

    将TClientDataset.refresh试一试。试过无效!
      

  6.   

    估计可能存在的问题:
      1, yzykjh(多米诺骨牌),C3.next ;  //这一句是多余的,Delete执行完后自动下移
      2, 这种巢式数据中,既然你的C3是通过DataSetField从C1中拿到的数据,那么  
         ApplyUPdates自然也应通过C1来提交数据给远程数据模块,把C3.ApplyUpdates(-1)
         改成C1.ApplyUpdates(-1)看看;
      3,如果问题还存在,把客户端的代码贴出来看看
      

  7.   

    按owl_927(狎鸥客)说的做,应该没有问题的
    因为在ClientDataset1中,C2,C3只能算是C1的一个字段而已
      

  8.   

    首先,需要使用Sql语句进行更新
    第二,依你所说的是,主细表结构,那么普通的更新是不可以的,因为DataProvider是识别不了的,需要使用Tupdatesql控件(大概是这样,控件的具体名称现在已经模糊了!)
    第三,如果还是不行,那么另请高人