2017-09-25 4 views
1

実行時にFielddefsがロードされ、値が追加されたClientdatasetがあります。索引付けはなく、プロバイダーもなく、データ・セットはXMLファイルに直接保管されます。 値を変更すると(ワードタイプのみ)、新しいレコードが作成されますが、古い行データは保持され、xmlファイルに保存されますが、レコードに関連付けられていません。さらに、冗長で非アクティブな行は、連続した読み込みと保存で混乱します。 これは私が、一時的なデータセットを作成する作業データセットを削除してから変更されていない値のレコードのデータを使用して保存するように、この周り不器用な方法を考えることができ、コード編集済みだがアクセスできない古いデータを保持しているデータセットを避けるにはどうすればいいですか?

`CFCDS.First; 
While not CFCDS.eof do 
begin 
     GetCFGComps(); 
     CFCDS.next; 
end;` 

Procedure GetCFGComps(); 
    var j: integer; 
    Begin 
     for j := 0 to 14 do 
     begin       {READ values to record} 
       case j of 
        0: FldPos.L := CFCDS.Fields[j].Value; 
        1: FldPos.T := CFCDS.Fields[j].Value; 
        ........... 
       end; 
     end; 
     with FldPos do begin 
      L := 550; 
      T := 69; 
      W := 333; 
     end; 
     for J := 0 to 14 do 
     begin 
      case j of 
       0: CFCDS.Fields[j].Value:=FldPos.L; 
       1: CFCDS.Fields[j].Value:=FldPos.T; 
         .................... 
      end; 
     end; 
     CFCDS.SaveToFile(CFGFileName, dfXML); 
     j:= CFCDS.RecordCount;   //always 50 - the correct number 
     CFCDS.First;      
     FldPos.L  := CFCDS.Fields[1].Value;   //returns new values 
     CFCDS.SaveToFile(DIRY+'CFTEXT.cft',dfBinary); //also has old supernumery rows 
    end; ` 

This is section of the xml file showing the last of the previous data set (Rowstate = "5" and the start of the new active data set below the red line Rowstate = "12" です。 CDSはいくつか不快な点がある場合には新しいレコードを作成することができますが、値の変更は非常に簡単です。
コードを削除すると、FldPosで が始まります L:= 550; T:= 69; W:= 333; end; XMLファイルは、レコードデータ(すべての行のRowstate "4")だけでクリーンです。

データセットをプログラムで編集する方法をお教えいただける方 古いアクセスできないデータは保持されず、レコードの行データのみが含まれていますか?ありがとう

答えて

1

発見された解決策:CFCDS.LogChanges:= false;

関連する問題