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 :

Boucle sur les enregistrements du champ clé primaire [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut Boucle sur les enregistrements du champ clé primaire
    Bonjour,
    voilà, je veux faire une boucle sur le champ "clé primaire" allant de la plus petite valeur à la plus grande.
    Ma clé est auto incrémente.
    Comment désigner la plus petite valeur du champ?
    Comment désigner la plus grande valeur du champ?
    Enfin comment faire la boucle?
    Merci déjà.

    PS: je rappelle je suis débutante

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourquoi boucler ?

    Qu'est-ce que tu souhaites faire ?

    Si c'est une recherche il y a d'autres solutions (requêtes, recordset, etc...)

    Philippe

  3. #3
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut
    Je veux par la boucle mettre à jour toutes les lignes de ma table avec une nouvelle chaine de caractère.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Regardes du coté des requêtes de mises à jour, ce sera beaucoup plus rapide
    :

    http://access.developpez.com/sql/

    A tester sur une copie de table, car la transformation est irréversible.

    Détail plus ta tables, tes données, ce qui doit être mis à jour, etc..

    Philippe

  5. #5
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut
    Désolée j'ai manqué de précision dans ma demande,
    En fait, je veux mettre à jour seul champ de ma table avec une nouvelle chaine de caractère.
    je veux avoir un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = a To b
    'a=la plus petite valeur du champ [clef] de la table Avancement
     'b la plus grande valeur
      MyString = DLookup("[holeID]", "Avancement", "[clef]=" & i)
      MyPrefix = BAGO
      tt = "S" & MyPrefix & Mid(MyString, 4, 4) & Right(MyString, 1) & "AVAN.M"
            rs1.Fields("holeID") = tt

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Ce n'est pas du tout clair et pas la bonne méthode.

    Donnes plus d'informations :

    Nom de la table ?
    Structure de celle-ci ? Champ, etc.
    Qu'est-ce qui qualifie l'enregistrement à mettre à jour ?
    Qu'est-qui est à mettre à jour ?

    En fonction des informations, cela pourrait tenir sur 3 lignes.

    Philippe

  7. #7
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Maude_84,
    Philippe a raison ce n'est pas clair mais pour répondre à ton post # 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rs1.MoveFirst
    While rs1.EOF = False
    Ton code
    rs1.MoveNext
    Wend
    Va te permettre de boucler les records.

    Bonne journée

  8. #8
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut
    Bonjour à tous,
    nom de ma table: Avancement
    champs: clé primaire, holeID
    champ à mettre à jour: holeID

    je veux mettre a jour tous les enregistrements du champ holeID en partant de la plus petite valeur à la plus grande valeur de la clé primaire.
    Voici ce que j'ai pu écrire :

    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
    24
    25
    Dim db As Database
        Dim rs1 As Recordset
        Dim rs2 As Recordset
        Dim i, a, b As Long
        Dim MyString As Variant
        Dim MyPrefix As Variant
        Dim tt As String
     
    'boucle sur la clé primaire
    a = DMin("[clé]", "Avancement")
     b = DMax("[clé]", "Avancement")
      For i = a To b
      MyString = DLookup("[holeID]", "Avancement", "[clé]=" & i)
     
      MyPrefix = BAGO
     
      tt = "S" & MyPrefix & Mid(MyString, 4, 4) & Right(MyString, 1) & "AVAN.M"
     
    'ecriture champ tt
            rs1.Fields("holeID") = tt
     
            'mise a jour
           rs1.Update
        Next i
    End Sub
    j'espère que ce code traduit mieux ma pensée

    Merci déjà pour votre aide.

  9. #9
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour Maude_84,

    Il me semble que tu t'embarques sur quelque chose de plutôt compliqué en utilisant le Dlookup
    A mon avis, une requête de mise à jour sera beaucoup plus simple à mettre en oeuvre
    fais déjà une requête du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select holeID, "S" & "BAGO" & Mid(holeID, 4, 4) & Right(holeID, 1) & "AVAN.M" as new_value
    from Avancement
    order by clé;
    et regarde si ça te convient

    pour la mise à jour la requête serait du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Update Avancement set holeID = "S" & "BAGO" & Mid(holeID, 4, 4) & Right(holeID, 1) & "AVAN.M";

  10. #10
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Maude_84, dumas.blr, Philippe,

    J'ai relu la demande et si j'ai bien compris le # 1 et le # 8 il me vient une question: Depuis quand peut-on mettre à jour un champ auto incrémenté qui est la clé primaire d'une table?

    Bonne journée

  11. #11
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Depuis jamais

  12. #12
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour Robert1957 et Tofalu,
    Heu, à moins que je n'ai rien compris, il semble que Maude_84 cherche à mettre à jour la colonne HoleID, qui ne me parait pas être un auto-incrément.

    Je ne suis pas trop familier du DLOOKUP , mais il me semble que son code s'apparente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select HoleID from Avancement
    where  clé = <un nombre entre DMin("[clé]", "Avancement") et  DMax("[clé]", "Avancement");

  13. #13
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour Jean-Yves,
    voilà, je veux faire une boucle sur le champ "clé primaire" allant de la plus petite valeur à la plus grande.
    Ma clé est auto incrémente.
    champs: clé primaire, holeID
    champ à mettre à jour: holeID
    C'est pour cette raison que je posais la question, à Maude de préciser...

    Bonne journée

  14. #14
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par Tofalu Voir le message
    Depuis jamais
    Tout à fait d'accord, une clé primaire étant en général un repère avec une autre table, mettre à jour celle-ci fait perdre toutes les liaisons

    Le but est loin d'être évident, pourquoi modifier cette clé ?

    Philippe

  15. #15
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut
    Bonjour à tous, merci pour toutes vos interventions.
    dumas.blr m'a comprise.
    il semble que Maude_84 cherche à mettre à jour la colonne HoleID, qui ne me parait pas être un auto-incrément
    .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select HoleID from Avancement
    where  clé = <un nombre entre DMin("[clé]", "Avancement") et  DMax("[clé]", "Avancement");
    est exactement ce que je cherchais à faire.
    et pour ce faire j'ai dû écrire ça: #8

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'boucle sur la clé primaire
    a = DMin("[clé]", "Avancement")
     b = DMax("[clé]", "Avancement")
      For i = a To b
      MyString = DLookup("[holeID]", "Avancement", "[clé]=" & i).........
    PS: je suis débutante

  16. #16
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour Maude_84,

    Raison de plus pour ne pas hésiter à user et abuser du SQL (surtout pour une DBA ! )
    que penses-tu de ma proposition pour faire juste un Update SQL ? dans ton code ? (cf. #2)

  17. #17
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut
    Merci pour le conseil dumas.blr.
    Je vais essayer d'utiliser ton code et je mettrai le résultat.
    Pour le moment je rencontre des pb de syntaxe

  18. #18
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    quels sont tes pb de syntaxe ?

  19. #19
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut
    Tout le code que tu as écrit est mis en rouge dans la fenêtre VB .
    vu que c'est un langage sql

  20. #20
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Et bien autant le mettre dans une requête non ?

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

Discussions similaires

  1. [XL-2007] Boucle sur les valeurs de champs de page d un tcd
    Par christof27 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 21/12/2012, 17h26
  2. [MySQL] Boucle sur les enregistrements pour les formater
    Par alizea77 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 28/02/2008, 15h52
  3. boucle sur les champs dynamiques
    Par Anduriel dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/06/2006, 19h49
  4. Réponses: 6
    Dernier message: 20/04/2006, 13h24
  5. Macro sur Excel/Boucle sur les lettres
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2005, 11h56

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