Bonjour,

dans le cadre d'un programme j'utilise une table mémoire que je remplie en fonction d'une requête dans un BDD

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
      Datas.Produits.CopyDataSet(Datas.GQuery, [coRestart, coAppend]);
Jusque là pas de soucis.

Maintenant, connaissant mes utilisateurs , je me suis mis en tête d'éviter des doublons et donc d'ignorer le/les ajouts inutiles. J'ai donc ajouté un clé primaire à ma table mémoire
et me suis alors penché sur les mises à jour en mémoire cache

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
      Datas.Produits.CachedUpdates:=True;
      Datas.Produits.CopyDataSet(Datas.GQuery, [coAppend]);
      if Datas.Produits.UpdatesPending then
          Datas.Produits.ApplyUpdates;
      Datas.Produits.CachedUpdates:=False;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
procedure TDatas.ProduitsAfterApplyUpdates(DataSet: TFDDataSet;
  AErrors: Integer);
begin
Produits.Refresh;
end;
Mais, là, il y a un hic
[FireDAC][Comp][DS]-205. Impossible d'actualiser l'ensemble de données [Produits]. Les mises à jour en cache doivent être validées ou annulées et le mode Batch doit être terminé avant l'actualisation
1 - Je dois avoir oublié quelque chose mais je vois pas quoi ?
2 - Comment faire pour ignorer les insertions de lignes dupliquées ?

Merci, mes CachedUpdates sont loin dans ma mémoire et c'est un cas que je n'ai pas trouvé dans les exemples