2017-09-25 6 views
1

J'ai un jeu de données Client dont les Fielddefs sont chargés et les valeurs sont ajoutées lors de l'exécution. Il n'y a pas d'indexation et pas de fournisseur et l'ensemble de données est enregistré directement dans un fichier XML. Si je modifie les valeurs (uniquement les types de mots), de nouveaux enregistrements sont créés, mais les anciennes données de ligne sont conservées et enregistrées dans le fichier xml mais ne sont pas associées aux enregistrements. De plus, les rangées redondantes inactives mulltiply avec des lectures successives et enregistre. Ce codeComment éviter que l'ensemble de données conserve d'anciennes données éditées mais inaccessibles?

`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" Je peux penser à des façons maladroites autour de cela comme la création d'un ensemble de données temporaire, la suppression des données de travail définies et économiser en utilisant les données d'enregistrement des valeurs qui ne sont pas modifiées. J'apprécie que la CDS puisse créer de nouveaux enregistrements si elle trouve quelque chose de désagréable, mais c'est un changement de valeurs très simple.
Si je supprime le code: avec FldPos commence L: = 550; T: = 69; W: = 333; fin; le fichier XML est propre avec seulement les données d'enregistrement (toutes les lignes Rowstate "4").

Est-ce que quelqu'un a une suggestion sur la façon dont l'ensemble de données peut être édité par programme afin que les anciennes données inaccessibles ne soient pas conservées et ne contiennent que des données de ligne des enregistrements? Merci

Répondre

1

Solution trouvée: CFCDS.LogChanges:= false;