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 :

Update d'une table avec ses propres données


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut Update d'une table avec ses propres données
    Bonjour tout le monde,

    Je n'arrive pas à faire une requête "update" dans ma macro.
    Je m'explique :
    J'ai une table T_RECO_SRC possédant entre autres les champs Reco_Ref (référence de la recommandation), Code, et Year.
    Reco_Ref et Year forment la clé de la table puisque l'on peut avoir la même référence pour deux années différentes mais pas pour la même année.
    J'ai dans les variables current_year et previous_years deux années différentes.

    J'aimerais pouvoir, quand la référence existe pour les deux années, updater le code de l'année présente avec celui de l'année précédente.

    C'est peut être tout bête mais je ne vois vraiment pas comment faire ! Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Par défaut
    Bonjour

    D'après les éléments fournis, je crains (mais pas sûr) que tu finisses par stocker des données surabondantes (oui/non ?).
    Reste sur le principe "une donnée, une fois seulement". (sauf les champs permettant d'établir des relations)

    Tu as un champ year dans la table.
    les variables current_year et previous_years
    Contrôles dans un formulaire ? Champs de la Table ? Différences avec year ?

    titi95

  3. #3
    Membre éclairé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 53
    Par défaut
    Méthode bricolo (avec ADO) :

    - Requete ou tu ouvres toute ta table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL1 = "SELECT * FROM T_RECO_SRC"
    Requete1.Open SQL1, CurrentProject.Connection
    Requete1.MoveFirst
     
    While not Requete1.EOF
     
    Reference = Requete1![Reco_Ref]
    Année = Requete1![Year]
    - Pour chaque enregistrement, tu ouvres une requete avec tous tes champs avec en condition le code de l'enregistrement en cours et l'année différente de l'enregistrement en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL2 = "SELECT * FROM T_RECO_SRC WHERE [T_RECO_SRC].Reco_Ref = '" & Reference & "' AND [T_RECO_SRC].Year <> " & Année
    Requete2.Open SQL2, CurrentProject.Connection
    Si ton champ Reco_Ref est en numérique alors enlève les ' avant les "

    - Si cette nouvelle requête n'est pas vide (if not requete.EOF Then) alors mise à jour du champ CODE de la première requête par le champ CODE de la deuxième requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If not requete2.EOF Then
         Requete1![CODE_] = Requete2![CODE_]
    End If
    Requete2.Close
    Requete1.movenext
    Wend

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    Merci pour vos réponses !
    Je me suis inspiré de ta réponse Vincent en faisant qq modifs car j'utilise DAO.

    Bon après midi

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 289
    Billets dans le blog
    48
    Par défaut
    bonjour,

    avec une requête update (paramétrée):

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE T_RECO_SRC T1 INNER JOIN  T_RECO_SRC T2
    ON (T1.Reco_Ref=T2.Reco_Ref)
    Set T1.[LeChampCode]=T2.[LeChampCode]
    WHERE (T1.[Year]=[current year] AND T2.[Year]=[previous year]);

    [EDIT]
    pas cool le nom du champ [code] dans la balise , et avec le champ [year] (également un mot réservé d'Access) en prime c'est carrément de la provoc

Discussions similaires

  1. Update d'une table avec d'une base à une autre
    Par bb44115 dans le forum SQL
    Réponses: 1
    Dernier message: 28/05/2008, 17h52
  2. Débutant: UPDATE d'une table avec sous-requête ?
    Par ctobini dans le forum Débuter
    Réponses: 2
    Dernier message: 03/10/2007, 12h45
  3. Réponses: 14
    Dernier message: 05/09/2006, 18h01
  4. Update d une table avec plusieurs valeurs
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2006, 09h58
  5. UPDATE d'une table avec test d'un champ d'une autre table
    Par delphim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2004, 13h30

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