2017-09-25 3 views
1

Ich habe ein Clientdataset, dessen Fielddefs zur Laufzeit geladen und Werte hinzugefügt werden. Es gibt keine Indizierung und keinen Provider und der Datensatz wird direkt in einer XML-Datei gespeichert. Wenn ich die Werte (nur Wortarten) ändere, dann werden neue Datensätze erstellt, aber die alten Zeilendaten werden beibehalten und in der XML-Datei gespeichert, sind jedoch NOT mit den Datensätzen verknüpft. Außerdem werden die redundanten, inaktiven Zeilen immer wieder mit aufeinanderfolgenden Lese- und Speicherparametern gespeichert. Dies ist der CodeWie kann ich vermeiden, dass der Datensatz alte bearbeitete, aber nicht zugängliche Daten beibehält?

`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" ich ungeschickter Möglichkeiten, um dieses wie eine temporäre Datensatz erstellen, löschen die Arbeitsdatensatzes denken kann und dann das Speichern der Aufzeichnungsdaten für Werte verwendet, die nicht verändert werden. Ich schätze, dass CDS neue Datensätze erstellen kann, wenn es unangenehm ist, aber dies ist eine sehr einfache Änderung der Werte.
Wenn ich den Code entfernen: mit FldPos beginnen L: = 550; T: = 69; W: = 333; Ende; Die XML-Datei ist nur mit den Datensatzdaten (alle Zeilen Rowstate "4") sauber.

Hat jemand einen Vorschlag, wie der Datensatz programmgesteuert bearbeitet werden kann so alte unzugängliche Daten nicht beibehalten wird und es nur Zeilendaten von Datensätzen enthält? Danke

Antwort

1

Gefundene Lösung: CFCDS.LogChanges:= false;

Verwandte Themen