clientdataset过滤后在客户端使用RecordCount显示只有一条,把cds.xmldata赋值到data后提交到服务器端,却显示RecordCount是没有过滤前的客户端
      vBabyCheck[2] := dmData.cdsXWXL.XMLData;   Showmessage(IntToStr(dmData.cdsWY.RecordCount) + '  ' + IntToStr(dmData.cdsTGFY.RecordCount) +
                  '  ' + IntToStr(dmData.cdsXWXL.RecordCount) + '  '   );过滤方式:
       cdsSport.Filtered := False;
       cdsSport.Filter :=  'CompanyID = ' + IntToStr(LGlobal.CompID) +
                          ' and  BabyID = ' + IntToStr(LGlobal.BabyID) +
                          ' and  F_Month = ' + FloatToStr(fSportMonth);
       cdsSport.Filtered := True;
中间没有汉字内容显示都是 1 服务器:
          Cltds.XMLData:=vBabyCheckInfo[2];
        ShowMessage(IntToStr(Cltds.RecordCount));
显示确实在客户端没有过滤前的条数

解决方案 »

  1.   

    LZ可能對filter的機制不明白,假設你所用的是TQuery(如果用ADOQuery或者其他也一樣),從數據庫獲取數據使用的SQL語句是TQuery.SQL屬性,也就是說,從數據庫取得的是所有滿足SQL屬性記錄,而不是一條!!而Filter的設置,是在客戶端進行了篩選,所以在表面看來衹有一條記錄。而從LZ所述的提交方法來看,所提交的記錄也是全部記錄,而不是一條!
    因此,如果樓主想取得一條記錄,使用filter是沒有作用的,應該直接在TQuery(或其他)的SQL屬性中設置條件.而在更新時,如果你衹取一條記錄,更新當然也是一條,另外也可以選擇手動更新,比如使用Query.ExecSQL('update ...').
      

  2.   

    同意黑马王子,CLIENTDATASET的工作方式有关,表中所有符合SQL查询条件的记录都被下载到本地,然后再由FILTER过滤,所以不管你FILTER过后是几条记录,从服务器传送过来的都是符合SQL查询的记录.可以参考一下CLIENTDATASET的DATA和DELTA属性.