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 :

Modification d'un enregistrement dans une table


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut Modification d'un enregistrement dans une table
    Bonjour à tous !

    Je suis actuellement débutant sur Access 2003, et je dois créer une application en VBA.
    A un certain moment, dans cette application, je dois pouvoir modifier un enregistrement spécifique dans une table de la base de données (pour cela, j'ai utilisé une requête qui recherche cet enregistrement).
    J'ai donc utilisé la méthode "RecordSet", l'enregistrement s'affiche sur mon formulaire, je modifie quelques paramètres, et... voilà mon problème :
    - Une fois l'enregistrement modifié, je me retrouve avec l'enregistrement modifié ET l'enregistrement précédent !!! Plus clairement, si je souhaite modifier mon enregistrement avec Nom=1 en lui donnant Nom=2, je me retrouve avec deux enregistrements (celui avec Nom=1 et celui avec Nom=2) dans la table de la base de données, ce qui embarassant !

    Si quelqu'un aurait une idée pour me dépanner, ce serait super.

    Voici le code concernant le RecordSet (la requête étant beaucoup trop longue, je ne l'ai pas écrite, mais j'indique où elle est placée. En fait, elle ne fait que me renvoyer un enregistrement dont l'ID correspond à celui que je lui indique) :

    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
     
    ' DEFINITION DES VARIABLES
    Dim qdf As DAO.Database
    Dim rcs As DAO.Recordset
     
    ' RECUPERATION DE LA BASE DE DONNEES (ici, je l'ai appelée "BaseDeDonnees")
    Set qdf = DBEngine.OpenDatabase("C:\Access\BaseDeDonnées.mdb")
     
    ' REQUETE D'AFFICHAGE
    strSQL = "...Requête..."
     
    ' OUVERTURE DU RECORDSET
    Set rcs = qdf.OpenRecordset(strSQL, dbOpenDynaset)
     
    ' PASSAGE EN MODE MODIFICATION
    rcs.Edit
     
    ' MODIFICATION DES DONNEES (ici, par exemple, je modifie le nom d'un utilisateur dans un enregistrement de la table UTILISATEUR)
    Me.Nom.Value = rcs!Nom
     
    ' FERMETURE DU RECORDSET
    rcs.Close
    qdf.Close
    Set rcs = Nothing
    Set qdf = Nothing
    Merci d'avance !!!

  2. #2
    Membre très actif Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Par défaut
    d'où l'intéret d'avoir une clé primaire, comme ça pas d'appel par le nom mais par la clé primaire qui ne changera jamais et qui est unique.

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Oui, je suis au courant, mais j'appelle bien la requête en utilisant l'ID (qui est la clé primaire). C'est lors de l'enregistrement des données que je ne parviens pas à faire en sorte qu'il conserve le même ID.
    Il me semble qu'il faut bien faire un ".Update" avant de fermer le recordset, non ?

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    De plus, je suis désolé, j'ai fait une erreur sur mon code

    Quand j'ai noté :

    ...en fait, je ne modifie pas les données, mais je les affiche dans les champs du formulaire ! Ici, j'affiche le nom d'un utilisateur.

    Après, je souhaite modifier les enregistrements directement sur les champs du formulaire, et enregistrer les modifs ensuite sur cet enregistrement sans créer de doublons. Quelqu'un aurait une idée ?

    Désolé de cette erreur !

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

    Plusieurs choses

    1 - Ici, il faut inverser
    2 - Il te faut ensuite unpour finir la mise à jour.

    Starec

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Merci Starec, pour ton aide

    Bonne nouvelle : la modification s'effectue bien
    Mauvaise nouvelle : il y a encore un ajout qui s'effectue
    Je me retrouve donc avec deux enregistrements modifiés !

    En fait, je pense que cela a à voir avec l'emplacement du code :

    Dans Form_Activate, j'effectue les tâches suivantes :

    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
     
    ' DEFINITION DES VARIABLES
    Dim qdf As DAO.Database
    Dim rcs As DAO.Recordset
     
    ' RECUPERATION DE LA BASE DE DONNEES (ici, je l'ai appelée "BaseDeDonnees")
    Set qdf = DBEngine.OpenDatabase("C:\Access\BaseDeDonnées.mdb")
     
    ' REQUETE D'AFFICHAGE
    strSQL = "...Requête..."
     
    ' OUVERTURE DU RECORDSET
    Set rcs = qdf.OpenRecordset(strSQL, dbOpenDynaset)
     
    ' AFFICHAGE DE L'ENREGISTREMENT DANS LES CHAMPS DU FORMULAIRE
    ' (ici, par exemple, j'affiche le nom d'un utilisateur dans un champ du formulaire)
    Me.Nom.Value = rcs!Nom
    Et dans Form_Close :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ' PASSAGE EN MODE MODIFICATION
    rcs.Edit
     
    ' MODIFICATION DES DONNEES (après avoir modifié le champ Nom du formulaire)
    rcs!Nom = Me.Nom.Value
     
    ' MISE A JOUR DES DONNEES
    rcs.Update
    ' FERMETURE DU RECORDSET
    rcs.Close
    qdf.Close
    Set rcs = Nothing
    Set qdf = Nothing
    Y aurait-il une erreur dans le code ?

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

    Qu'y a til dans ta requête ?

    Elle ne devrait te retourner qu'un seul enregistrement, est-ce le cas ?

    Starec

Discussions similaires

  1. [Conception] Modification d'enregistrement dans une table
    Par Volixium dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/09/2006, 13h48
  2. Position d'un enregistrement dans une table
    Par polinevol dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/01/2006, 10h10
  3. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 21h11
  4. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 20h07
  5. AJOUT d'un ENREGISTREMENT dans UNE TABLE
    Par ramo dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/08/2005, 17h24

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