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

  1. #1
    Membre du Club
    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
    Points : 53
    Points
    53
    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
    Points : 3 611
    Points
    3 611
    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 du Club
    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
    Points : 53
    Points
    53
    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 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    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
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre du Club
    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
    Points : 53
    Points
    53
    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 du Club
    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
    Points : 53
    Points
    53
    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 ?

  7. #7
    Membre du Club
    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
    Points : 53
    Points
    53
    Par défaut
    je ne comprends pas trop ce paramètre qui semble important :
    Global temporary tables have persistent metadata, but their contents are transaction-bound (the default) or connection-bound.

  8. #8
    Membre du Club
    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
    Points : 53
    Points
    53
    Par défaut
    Actuellement avec les MemTb, le client charge les lignes necessaires du serveur et les modifie.
    Ensuite je récupère les lignes modifiées avec le MemTb.delta et je retourne les modifications sur le serveur.
    Avec une Global Temporary Table quelle serait la différence, à part dispenser d'utiliser firedac ?

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par GrPtj
    Je croyais que passer par les MemTb au lieu de base sql était votre proposition ?
    la mienne, non je ne crois pas. C'est vous qui voulais passer par SQLite, moi je n'ai fait qu'indiquer de passer par un TBatchMove dans la problématique exposée.
    J'ai indiqué qu'il fallait passer par SQLite dans le cas de postes déconnectés (comme par exemple des mobiles, qui de toute façon aurait du mal à se connecter à Firebird avec Firedac, sauf bidouillage en cours de test)

    Citation Envoyé par GrPtj Voir le message
    Je viens de me renseigner sur les GTT : Global Temporary Tables
    vraiment pas curieuse alors car je l'ai indiqué 2 fois
    Si j'ai bien compris c'est l'équivalent des MemTable firedac.
    AMHA en mieux
    Au lieu de créer une table FD locale, je crée une table globale firebird.
    non, la table GTT est créée une seule fois la structure est ensuite gardée
    Du coup je ne passe plus par firedac, je copie directement ma table firebird dans la GTT ?
    ou plutôt une sélection de celle-ci

    Je suppose qu'il y a des sql pour passer de la table à la GTT 'à la manière' d'unbatchMove ?
    mon dernier post indiquait les SQL à utiliser, sans structure de table il était difficile de proposer plus
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par GrPtj Voir le message
    je ne comprends pas trop ce paramètre qui semble important :
    Global temporary tables have persistent metadata, but their contents are transaction-bound (the default) or connection-bound.
    Bien sûr qu'il est important !
    ON COMMIT PRESERVE ROWS les données resteront le temps de la session soit, le même comportement que le fdmemtable la table ou plutôt les données de la session étant supprimées en fin de connexion. (Une session égal une connexion utilisateur, un utilisateur ne "voit" pas les données des autres sessions). Bien sûr on peut faire des delete des données dans la table.
    ON COMMIT DELETE ROWS est plus compliqué, il faut parfaitement maitrisé les transactions dans ce cas
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre du Club
    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
    Points : 53
    Points
    53
    Par défaut
    Et bien voila j'ai remis tous les morceaux dans l'ordre !!!
    merci beaucoup

    Du coup un conseil par rapport à transaction-bound ou connection-bound ?

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par GrPtj Voir le message
    Actuellement avec les MemTb, le client charge les lignes necessaires du serveur et les modifie.
    le simple INSERT INTO FROM SELECT FROM
    Ensuite je récupère les lignes modifiées avec le MemTb.delta et je retourne les modifications sur le serveur.
    l'utilisation du UPDATE OR INSERT
    Avec une Global Temporary Table quelle serait la différence, à part dispenser d'utiliser firedac ?
    réfléchissez à qui bosse et comment : le programme ou Firebird ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par GrPtj Voir le message
    Du coup un conseil par rapport à transaction-bound ou connection-bound ?
    Vous êtes très à l'aise avec les transactions ? Perso, malgré mes années d'expérience, je ne le suis toujours pas complètement. Avec Firedac c'est encore plus subtil, surtout que cette histoire de Delta ne vas pas arranger les choses AMHA c'est simplifiable
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    Membre du Club
    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
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup pour tous ces éclairages,
    Je retiens que si on n'a pas besoin de travailler coupé du serveur les GTT sont préférables,
    les MenTable de firedac permettent de travailler localement ou avec plusieurs sortes de bdd.

  15. #15
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par GrPtj Voir le message
    les MemTable de firedac permettent de travailler localement ou avec plusieurs sortes de bdd.
    ne pas confondre FDMemTable et FDLocalSQL on peut très bien faire des SQLs sur plusieurs sortes de BDD sans avoir besoin de tables mémoires
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  16. #16
    Membre du Club
    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
    Points : 53
    Points
    53
    Par défaut
    J'ai refait mes essais avec une GTT et c'est très concluant.
    Cependant je voudrais créer les champs de la GTT à partir de ma table persistante sans avoir à les écrire un par un.
    Y a-t-il une commande pour ça ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE GLOBAL TEMPORARY TABLE TEST
    select * from MATABLE
    ON COMMIT PRESERVE ROWS
    ne fonctionne pas.

  17. #17
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Il me semble avoir lu de pprem qu'un BatchMove pouvait copier la structure seulement : serait-ce utilisable ici ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  18. #18
    Membre du Club
    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
    Points : 53
    Points
    53
    Par défaut
    je ne crois pas,
    le batchmove copie entre 2 composants firedac
    pas entre 2 tables firebird

  19. #19
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Quid de ceci, inspiré d'ici ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE GLOBAL TEMPORARY TABLE TEST AS
    select * from MATABLE
    where 1=2
    ON COMMIT PRESERVE ROWS;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  20. #20
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Une table GTT est une table dont la structure ne se crée qu'une seule fois (pour tous les utilisateurs), pas à chaque fois. Donc non il n'y a pas de Create à faire vous mélangez un code de céation àevec un code de remplissage.
    A l'occasion vous pouvez créer/détruire une table GTT à partir d'un FDScript
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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