IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

CachedUpdates d'une FDMemtable


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 689
    Billets dans le blog
    65
    Par défaut CachedUpdates d'une FDMemtable
    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

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 118
    Par défaut
    Perso, je gérais le Delta du TClientDataSet manuellement et générait mon propre SQL
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 689
    Billets dans le blog
    65
    Par défaut
    J'ai aussi fait comme ça, abandonnant le CopyDataset et le cacheupdate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        while not EOF do
            begin
             Datas.Produits.Insert;
             for I := 0 to 4 do
               Datas.Produits.Fields[i].Value:=Fields[i].Value;
             try
               Datas.Produits.Post;
             except
               Showmessage('Err');
             end;
             Next;
         end;
    Problème mon message d'erreur ne montre toujours pas le bout de son nez, l'exception est levée avant :
    J'en perd mon latin de cuisine on est vendredi !

    du coup, j'ai l'impression de reculer avec un code de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       while not EOF do
            begin
             if not Datas.Produits.FindKey([Fields[0],Fields[1]]) then
             begin
              Datas.Produits.Insert;
              for I := 0 to 4 do
               Datas.Produits.Fields[i].Value:=Fields[i].Value;
               Datas.Produits.Post;
             end;
             Next;
            end;

Discussions similaires

  1. [Firedac]Changement d'index pour une FDMemTable
    Par SergioMaster dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/11/2019, 10h29
  2. Chargement d'un fichier CSV dans une FDMemTable
    Par wstboss dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/06/2016, 13h34
  3. Rafraichissement d'une Table paradox avec CachedUpdates True
    Par abdelghani_k dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/09/2009, 13h08
  4. Réponses: 4
    Dernier message: 25/05/2007, 15h12
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo