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

Requêtes et SQL. Discussion :

Besoin de votre avis : synchro entre deux tables


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Besoin de votre avis : synchro entre deux tables
    Bonjour
    Je dispose de deux tables dans une base Access.
    La première est une table liée (format dbf) et c’est la table contenant les données de référence.
    La deuxième est la table servant à l’application. Elle est identique à la première sauf le champ ID qui est une clé primaire et qui est relié à d’autre table de mon application Access.
    Mon problème est de synchroniser les données de la table 1 vers la table 2. Cette synchro s’effectue dans un seul sens.

    La démarche que j’ai trouvée consiste à créer deux requêtes :
    Une requête insert qui créer dans la table2 les nouvelles lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO TABLE2
    SELECT TABLE1.*
    FROM TABLE1;
    Une deuxième requête qui fait dans la table2 un update ligne par ligne et champs par champs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE TABLE2 INNER JOIN TABLE1 ON TABLE2.ID = TABLE1.ID 
    SET TABLE2.CHAMP1 = [TABLE1]![CHAMP1], TABLE2.CHAMP2 = [TABLE1]![CHAMP2]
    WHERE (((TABLE2.ID)=[TABLE1]![ID]));
    Cette méthode ne me parait pas optimal mais est simple (juste deux requêtes appelées par une macro).
    Est-ce que je passe à côté de quelque chose ou bien ça vous parait OK ?
    Sinon avez-vous des suggestions pour optimiser cette synchro ?

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut et bienvenue,

    d'abord qq précision:
    tu ne fais pas une synchro puisque tu effectue que dans un seul sens la MAJ: tu recherche à importer des données pour MAJ ta base.
    ensuite c'est un peu bizzard ce que tu fais:
    ta première requete importe normalement tous les champs de Table1 vers Table2 alors à quoi sert le deuxième requete?
    'TABLE2.ID = TABLE1.ID' récupe les nouveaux enregistrements que tu maj les champs 'CHAMPS1' et 'CHAMPS2' de 'Table2' avec le 'SET' alors qu'ils viennent d'être copié.

    ou il y a qqc qui m'échappe.

    ps: 'INNER JOIN TABLE1 ON TABLE2.ID = TABLE1.ID' avec 'WHERE (((TABLE2.ID)=[TABLE1]![ID]))' ca fait doublon.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour et merci pour cette première réponse,

    Je fais cela car dans la Table2.id est clé primaire. Cette clé primaire est elle-même clé étrangère d’une autre table. Du coup je ne peux pas supprimer les données déjà existantes dans la table2. D’ailleurs quand j’exécute ma première requête j’obtiens un message du type « impossible de supprimer x enregistrement, violation de clé… ».

    Pour résumé la première requête ajoute les enregistrements qui n’existent pas dans la table 2 puis la deuxième requêtes met à jour tous les enregistrements (En écrivant cela, je me dis qu’il serait plus opportun d’inverser les deux requêtes)

    J’espère avoir été plus clair dans mon explication.

    Yo

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Bon, je récapitule:
    tu as des enregistrements dans Table1 que tu veux mettre dans Table2.
    ces enregistrements peuvent être présente dans Table2 dans ce cas les champs doivent être mis à jour.
    s'ils ne sont pas présent il faut simplement les ajouter.
    ce qui les identifie l'enregistrement c'est le champ ID.

    si c'est ca j'aurais fait aussi deux requetes mais ceux-ci:
    pour ajouter les enregistrement non présent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Table2 ( ID, CHAMP1, CHAMP2 )
    SELECT Table1.ID, Table1.CHAMP1, Table1.CHAMP2
    FROM Table1
    WHERE (Table1.ID Not In (SELECT Table2.ID FROM Table2));
    puis maj les enregistrements déjà présent dans Table2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Table1 LEFT JOIN Table2 ON Table1.ID=Table2.ID SET TABLE2.CHAMP1 = TABLE1!CHAMP1, TABLE2.CHAMP2 = TABLE1!CHAMP2;
    tu ne peux pas effectivement mettre à jour et inserer dans une même SQL.

Discussions similaires

  1. besoin de votre avis sur la création de tables
    Par gotcha5832 dans le forum MySQL
    Réponses: 1
    Dernier message: 29/06/2015, 10h29
  2. [AC-2010] Besoin de votre avis : Copie de table ou copie d'enregistrements ?
    Par lololebricoleur dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/12/2013, 22h45
  3. Transfert entre deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/10/2004, 15h36
  4. [VB.NET] ComboBox lien entre deux tables
    Par VDB1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/07/2004, 13h15
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 15h50

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