Je n'arrive pas à déterminer comment ajouter de nouveaux champs de données à un ancien fichier de jeu de données. Par exemple, un ancien jeu de données peut avoir un champ ID uniquement. Plus tard, nous décidons que nous avons besoin d'un champ ISACTIF. Je souhaite rouvrir mes données d'ID uniquement, puis les réenregistrer avec les valeurs ISACTIVE ajoutées. Par exemple:Delphi ClientDataSet - Comment ajouter de nouveaux champs de données à un ensemble de données existant?
CDS := TClientDataset.Create(nil);
with TIntegerField.Create(CDS) do
begin
FieldName := 'ID';
FieldKind := fkData;
DataSet := CDS;
end;
CDS.CreateDataSet;
CDS.Close;
with TBooleanField.Create(CDS) do
begin
FieldName := 'ISACTIVE';
FieldKind := fkData;
DataSet := CDS;
end;
CDS.Open; // <--Raises EDatabaseError with message 'Field 'ISACTIVE' not found'.
J'ai eu un coup d'oeil pour des questions similaires, le plus proche que j'ai trouvé un qui concerne l'ajout de nouveaux champs calculés à un seul ensemble de données. Cette méthode ci-dessus fonctionne très bien pour ajouter un champ calculé. À l'heure actuelle, la seule solution (désordonnée) que je puisse imaginer est de charger les données ID uniquement dans un jeu de données temporaire, puis de créer un nouveau jeu de données avec ID et ISACTIVE définis, puis de boucler le jeu de données ID-only. et copiez les enregistrements dans le nouvel ensemble de données.
Est-ce que cette aide vous ? http://stackoverflow.com/questions/21293186/delphi-change-fields-definitions-of-a-tclientdataset-that-has-data – Graymatter
hmm, oui d'une certaine façon. C'est une question assez bizarre que je pense ?! Quoi qu'il en soit, cette réponse http://stackoverflow.com/a/21295035/6620329 décrit ce que j'ai appelé une solution "désordonnée" à la fin de ma question.Peut-être que c'est la seule option qui s'offre à moi (la suggestion de MartynA d'éditer le fichier texte sur le disque). –