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

Delphi Discussion :

Firedac, BatchMove, ajout d'un champ à la table de destination


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Par défaut Firedac, BatchMove, ajout d'un champ à la table de destination
    Bonjour, grâce à votre aide j'utilise batchmove !
    Je copie une table du serveur localement dans une MemTable.
    Pour le travail en local j'ai besoin d'ajouter un champ à cette MemTable.
    J'obtiens la MemTable avec son champ en plus et ses données .
    Mais je fais 2 fois le batchmove.execute , je suppose qu'il y a un autre moyen de mettre à jour la Memtable ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    FDTbHistoCdc.Open() ;
      FDBatchMoveDataSetReader1.DataSet := FDTbHistoCdc ;
      FDBatchMoveDataSetWriter1.DataSet := FDMmMGCFC ;
      FDBatchMove1.Mode := dmAppendUpdate;
      try
        FDBatchMove1.Execute;
      except
        on E: EFDDBEngineException do
          ShowMessage('MySQLtoMem : ' + E.Message);
      end;
      FDTbHistoCdc.close ;
    //ajout champ TypeLgn
      with FDMmMGCFC.FieldDefs do
        with AddFieldDef do
        begin
          Name := 'TYPELGN' ;
          DataType := ftInteger ;
        end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //update de la MemTable
    FDMmMGCFC.close ;
      FDMmMGCFC.Open ;
    FDBatchMove1.Execute;
    J'ai essayé sans succès de remplacer les 3 dernières lignes par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FDMmMGCFC.ApplyUpdates() ;
      FDMmMGCFC.Refresh ;

  2. #2
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Bonjour

    Le TFDBatchMove copie la structure, les données ou les deux, mais normalement il écrase la destination avec ce qu'il doit envoyer (selon ses options d'écritures).

    N'est-il pas possible d'ajouter le nouveau champ dans la requête d'origine ? Ce serait plus simple à gérer ensuite selon comment il sera alimenté.

    Et d'ailleurs, pourquoi exécuter 2 fois le TFDBatchMove ? La première devrait suffire à alimenter la table en mémoire, non ?

  3. #3
    Membre confirmé
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Par défaut
    Et d'ailleurs, pourquoi exécuter 2 fois le TFDBatchMove ? La première devrait suffire à alimenter la table en mémoire, non ?
    la première alimente bien la table en mémoire mais il faut fermer et rouvrir la table pour pouvoir utiliser le nouveau champ,
    donc on perd les données, d'où le deuxième appel ...
    Si le champ est crée avant le batchmove il y a une erreur : inadéquation entre les champs entre origine et destination.
    Si je fais dans cet ordre il n'y a pas d'inadéquation ?

    N'est-il pas possible d'ajouter le nouveau champ dans la requête d'origine ? Ce serait plus simple à gérer ensuite selon comment il sera alimenté.
    effectivement c'est une bonne idée !

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    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 638
    Billets dans le blog
    65
    Par défaut
    Je présume que tout cela est la suite de ce post https://www.developpez.net/forums/d2...re-renumerote/
    J'avoue que je n'en comprend toujours pas vraiment le but !

    Citation Envoyé par pprem
    N'est-il pas possible d'ajouter le nouveau champ dans la requête d'origine ?
    j'approuve pleinement cette direction tout en déplorant que vous continuiez sur le Batchmove alors qu'une GTT Firebird serait plus rapide

  5. #5
    Membre confirmé
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Par défaut
    Effectivement, c'est la suite de mes essais, j'ai préféré refaire une conversation pour clarifier ...
    une GTT Firebird serait plus rapide
    Je croyais que passer par les MemTb au lieu de base sql était votre proposition ?
    Pouvez vous préciser ?

  6. #6
    Membre confirmé
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2014
    Messages : 102
    Par défaut
    Je viens de me renseigner sur les GTT : Global Temporary Tables
    Si j'ai bien compris c'est l'équivalent des MemTable firedac.
    Au lieu de créer une table FD locale, je crée une table globale firebird.
    Du coup je ne passe plus par firedac, je copie directement ma table firebird dans la GTT ?
    Je suppose qu'il y a des sql pour passer de la table à la GTT 'à la manière' d'unbatchMove ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Erreur 3371 lors de l'ajout d'un champ à une table
    Par AndréPe dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/04/2020, 19h58
  2. Réponses: 9
    Dernier message: 27/07/2016, 14h56
  3. [AC-2003] Problème avec l'ajout d'un champ à une table qui résulte d'une requête
    Par ostrich95 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/03/2014, 19h12
  4. Table Access : ajout d'un champ depuis VB6
    Par pcvesoul dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/09/2005, 09h14
  5. [debutant] Ajouter un champ à une table.
    Par castaka dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2005, 10h08

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