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

VBA Access Discussion :

Comparer 2 tables [AC-2010]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Comparer 2 tables
    Bonjour,
    J'ai 2 tables de structures identiques (T_Prospect et T_Prospect2). Les enregistrements de la table T_Prospect2 sont mises à jour régulièrement, je souhaite que les enregistrement de la table T_Prospect ayant le même identifiant soient mises à jour en cliquant sur un bouton situé dans un formulaire dont voici le code :
    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
    19
    20
    21
    22
    23
     
    Dim F As Field
    Dim rs As Recordset
    Dim rs1 As Recordset
    strSQL = "SELECT T_Prospect.[Téléphone fixe], T_Prospect.[Téléphone portable], T_Prospect.Email FROM T_Prospect;"
    Set rs = CurrentDb.OpenRecordset(strSQL)
     
    strSQL1 = "SELECT T_Prospect2.[Téléphone fixe], T_Prospect2.[Téléphone portable], T_Prospect2.Email FROM T_Prospect INNER JOIN T_Prospect2 ON T_Prospect.Id_prospect = T_Prospect2.Id_prospect;"
    Set rs1 = CurrentDb.OpenRecordset(strSQL1)
     
    While Not rs1.EOF
        For Each F In rs1.Fields
            If F.Value <> rs(F.Name) Then
                rs.Edit
                rs(F.Value) = rs1(F.Value)
                rs.Update
            End If
        Next F
     
        rs1.MoveNext
    Wend
    rs.Close
    rs1.Close
    Quand j'exécute le code, j'ai le message suivant : Erreur d'exécution 3265 Elément non trouvé dans cette collection sur la ligne : rs(F.Value) = rs1(F.Value)
    Merci d'avance de votre aide.
    Olivier

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Pourquoi utiliser DAO alors qu'une requête fait ça en une seule passe ?

    99% des problèmes peuvent et doivent être réglés avec des requêtes, c'est le but de la base de données. Les 1% restants ont pour origine une mauvaise conception ou une connexion entre des MCD incompatibles.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Je pensais qu'une requête mise à jour serait trop longue à exécuter. Comment mettre à jour uniquement les valeur qui ont changé à partir d'une requête ?
    Merci et cordialement,
    Olivier

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Non une requête est plus rapide que parcourir un recordset.

    Prend ta requête N°2. Elle a déjà la bonne liaison.

    Ouvre-la en mode création dans l'éditeur, sélectionne les champs que tu souhaites mettre à jour.
    Transforme-la en requête mise à jour en cliquant sur le bouton Requête Mise à jour du ruban.
    Dans la zone mise à jour de chaque colonne met cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =iif(tableDestination.[Champ1]<>tableSource.champ1;tableSource.champ1;tableDestination.champ1)
    Si le champ destination est différent du champ source Alors on y place le champ Source Sinon on laisse le champDestination.

    Tu n'as plus qu'à exécuter la requête.
    Fait un essaie sur une copie avant de te lancer.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    Merci beaucoup pour ton aide.
    J'ai un autre problème qui n'a rien à voir avec le précédent.
    Je dois ajouter des enregistrements d'une table (table4) à une autre (table3). Je n'ai aucun souci pour trouver les enregistrements de non correspondance mais je rencontre un difficulté pour alimenter un champ numérique qui sert de clé primaire dans la table3. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    vNum = DMax("id_loc", "table3")
    vSQL = "INSERT INTO Table3 ( id_loc, nom ) SELECT " & vNum & "+1, Table4.nom FROM Table3 RIGHT JOIN Table4 ON Table3.tok = Table4.token WHERE (((Table3.tok) Is Null));"
    DoCmd.RunSQL vSQL
    Le problème c'est qu'il n'ajoute qu'un seul enregistrement et j'ai un message me disant que les autres ne sont pas ajouter à cause d'une violation de clé.
    la fonction DMAX ne se recalcule pas.
    Merci d'avance
    Olivier

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Il y a un problème de logique dans ton montage.

    Tu cherches la plus grande valeur de Id_loc de table3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vNum = DMax("id_loc", "table3")
    ça c'est bon.

    Ensuite tu souhaites partir de cette valeur comme compteur, mais cette valeur est statique.

    Par exemple ton max est 100, la requête sera toujours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vSQL = "INSERT INTO Table3 ( id_loc, nom ) SELECT 100+1,...
    Donc la même valeur pour tous les enregistrements. D'où le message de violation de clef. Pourquoi tu utilises dmax() à l'extérieur de la requête ? Toutes les fonctions publiques sont accessibles par les requête en DAO.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    J'ai trouvé une solution en utilisant un recordset et une boucle. Ca fonctionne super.
    Merci encore
    Olivier

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Effectivement on peut toujours utiliser des boucles, des recordsets... pour arriver au résultat. Pour une petite application personnelle ça peut convenir.

    Personnellement je le déconseille fortement.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

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

Discussions similaires

  1. Comparer 2 tables sans checker chaque row
    Par BoOom dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 04/05/2006, 13h21
  2. [C#][VS2k5]Comparer 2 tables sans checker chaque row?
    Par BoOom dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/04/2006, 15h27
  3. Comparer 2 tables de structure identique.
    Par FMaz dans le forum Requêtes
    Réponses: 13
    Dernier message: 31/03/2006, 22h48
  4. Réponses: 7
    Dernier message: 20/02/2006, 16h18
  5. [MySQL] Comparer 2 tables
    Par v4np13 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 20/10/2005, 18h18

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