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 :

chercher un enregistrement d'une table


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Par défaut chercher un enregistrement d'une table
    Bonjour
    Je veux pouvoir chercher un enregistrement (dans une table) et me positionner sur lui pour en faire l’enregistrement courant pour pouvoir modifier certaines propriétés de cet enregistrement.
    J’illustre mes propos avec 1 exemple.
    J’ai une table élève avec 4 champs (id : numéroauto, nom, prénom, note)
    Sur mon formulaire j’ai 03 zones de texte une pour le champ nom, prénom et note et une zone de liste déroulante
    Lorsque je veux attribuer une note à l’élève, je veux que la sélection du nom de l’élève via la zone de liste déroulante (cmbnom) me positionne sur l’enregistrement de cet élève pour modifier la propriété note
    Je remplis la combo avec ce code au chargement du formulaire (load)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim sql As String
    sql = "select nom from eleve;"
    Me.cmbnom.RowSource = sql
    Me.cmbnom.Requery
    Je compte modifier la note via ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim m As Recordset
    Set m = CurrentDb.OpenRecordset("eleve", DB_OPEN_DYNASET)
    m.Edit
    m!note = Me.Texte5
    m.Update
    Me.Texte5 = " "
    Je cherche un code à mettre certainement dans l’évènement change de cmbnom de sorte dès qu’un nom est sélectionné je sois sur l’enregistrement de l’élève concerné.
    J’ai pense à la methode find mais je m’en souviens plus trop de la synthaxe
    J’espère avoir mieux expliquer ma préoccupation

    Bien Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    C'est l'événement AfterUpdate qu'il faut exploiter.
    De là, la combo retourne un ID qui correspond à l'élève, donc le NumAuto...

    Après, le formulaire ne possédant aucun RecordSource
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Form_Load()
        Me.RecordSource = vbNullString
        'ou SELECT * FROM Eleve si vous voulez... auquel cas on n'écrit pas les lignes suivantes
        Me.ID.ControlSource = "= " & Chr(34) & Chr(34)
        Me.Nom.ControlSource = "= " & Chr(34) & Chr(34)
        Me.Prénom.ControlSource = "= " & Chr(34) & Chr(34)
        Me.note.ControlSource = "= " & Chr(34) & Chr(34)
    End Sub
    on affecte via une chaîne SQL qui matche avec l'éleve en question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        SQL = "SELECT ID, nom, prénom, note FROM eleves WHERE ID = " Me!cmbnom & ";"
        Me.RecordSource = SQL
        Me.ID.ControlSource = "ID"
        Me.Nom.ControlSource = "Nom"
        Me.Prénom.ControlSource = "Prénom"
        Me.note.ControlSource = "note"
        Me.Refresh
    cmbnom est le nom de la ComboBox qui contient la liste à 2 colonnes (dont la colonne 0 est cachée et la 1 le nom de l'élève) des élèves tel que cité dans votre message.

    Bien entendu, il faut rendre dynamiquement la propriété ControlSource pour chaque champ dans ce même élan afin d'avoir les valeurs...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Par défaut
    Bien Merci pour votre reponse
    ceci quand je lance mon formulaire j'ai un message d'erreur compilation: Membre de methodes ou de données introuvable et selectionne le bout de code de l'évènement load du formulaire.
    je vous poste mes différents codes de mon application pour avoir plus d'aide
    Au chargement de la feuille j'ai le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Load()
    Me.RecordSource = vbNullString
    Me.ID.ControlSource = "= " & Chr(34) & Chr(34)
    Me.nom.ControlSource = "= " & Chr(34) & Chr(34)
    Me.prenom.ControlSource = "= " & Chr(34) & Chr(34)
    Me.note.ControlSource = "= " & Chr(34) & Chr(34)
    End Sub
    comme recommandé
    Dans la zone de liste, j'ai le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub cmbnom_AfterUpdate()
    Dim sql As String
        sql = "SELECT ID, nom, prenom, note FROM eleve WHERE ID = " & Me!cmbnom & ";"
        Me.RecordSource = sql
        Me.ID.ControlSource = "ID"
        Me.nom.ControlSource = "nom"
        Me.prenom.ControlSource = "prenom"
        Me.note.ControlSource = "note"
        Me.Refresh
     
    End Sub
    DAns le bouton ajouter j'ai le code suivant qui marche super
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Btnajouter_Click()
    Dim r As Recordset
    Set r = CurrentDb.OpenRecordset("eleve", DB_OPEN_DYNASET)
    r.AddNew
    r!nom = Me.Texte0
    r!prenom = Me.Texte2
    r.Update
    Me.Texte0 = " "
    Me.Texte2 = ""
     
    End Sub
    Dans le bouton Modifier j'ai le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Btnmodifier_Click()
     
    Dim m As Recordset
    Set m = CurrentDb.OpenRecordset(eleve", DB_OPEN_DYNASET)
    m.Edit
    m!note = Me.Txtnote
    m.Update
    me.txtnote= " "
    Merci de m'indiquer ce qui pose problème dans mes codes.

    Cordialement Tous

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    Me!ID n'existe pas sous ce nom dans votre table.
    ID est à remplacer par le nom du champ N° Auto de votre table.


    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Par défaut
    ID est en effet le nom du champ dans ma table
    Suivant vos instructions, j’ai essayé d’adatper mon code
    Avec les différents codes ci-dessous
    Code bouton ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Btnajouter_Click()
    Dim r As Recordset
    Set r = CurrentDb.OpenRecordset("eleve", DB_OPEN_DYNASET)
    r.AddNew
    r!nom = Me.Texte0
    r!prenom = Me.Texte2
    r.Update
    Me.Texte0 = " "
    Me.Texte2 = ""
    End Sub
    Code bouton modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub btnmodifier_Click()
    Dim m As Recordset
    Set m = CurrentDb.OpenRecordset("eleve", DB_OPEN_DYNASET)
    m.Edit
    m!note = Me.Texte4
    m.Update
    Me.Texte4 = " "
    end sub
    Code zone de liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub cmbnom_AfterUpdate()
    Dim sql As String
        sql = "SELECT ID, nom, prenom, note FROM eleve WHERE ID = " & Me!cmbnom & ";"
        Me.RecordSource = sql
    Me.Texte0.ControlSource = "nom"
        Me.Texte2.ControlSource = "prenom"
        Me.Texte4.ControlSource = "note"
        Me.Refresh
     End Sub
    Code au chargement de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Load()
    Me.RecordSource = "select * from eleve;"
    Dim sql As String
    sql = "select * from eleve;"
    cmbnom.RowSource = sql
    cmbnom.Requery
    End Sub
    Mais lorsque je selectionne un élève il me ramène les propriétés de cet élève(nom,prenom, note) dans les zones textes(texte0, texte2, texte4 ) appropriées
    Par contre quand je saisis une note dans la zone de texte réservé à note et je clique sur le bouton modifier,
    C’est le champ note du premier enregistrement qui est toujours modifié et non celui de l’enregistrement concerné par la sélection de la zone de liste.
    Il me semble bien que je ne suis pas bien loin du bout du tunnel
    J’ai encore besoin d’un coup de main
    Bien merci

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Par défaut
    Ma préoccupation en un mot consiste à modifier un enregistrement et je pense maintenant (avec un peu de retard; je l'avoue ) à une modification par une requete update.
    j'ai donc réecrire mon code et voici les bouts de code que cela me donne,
    Bouton Ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim db As DAO.Database
    Set db = DBEngine.OpenDatabase("C:\Documents and Settings\ordi\Mes documents\Bddeleve")
    db.Execute "insert into eleve (nom,prenom) values ('" & Me.txtnom & " ',' " & Me.txtprenom & " ')"
    Me.txtnom = " "
    Me.txtprenom = " "
    db.Close
    End Sub
    Le formulaire a pour code au chargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim db As DAO.Database, r As Recordset, chmp As DAO.Field
    Dim sql As String
    Dim sqlnom As String
     
    Set db = DBEngine.OpenDatabase("C:\Documents and Settings\ordi\Mes documents\Bddeleve")
    sqlnom = "select nom from eleve;"
    sql = "select * from eleve;"
    Set r = db.OpenRecordset(sql, dbOpenForwardOnly)
    Me.cmbnom.RowSource = sqlnom
    Me.cmbnom.Requery
    r.Close
    End Sub
    Le bouton Modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim db As DAO.Database
    Set db = DBEngine.OpenDatabase("C:\Documents and Settings\ordi\Mes documents\Bddeleve")
    db.Execute "update eleve set note = '" & Me.Txtnote & " ' where nom = ' " & Me.cmbnom & " ' "
    '
    Debug.Print "Records Affected = " & db.RecordsAffected
        db.Close
    Le bouton ajouter marche super bien à l'execution et j'arrive à inserer de nouveau enregistrements

    Par contre quand je clic sur le bouton Modifier; j'ai un message d'erreur
    " ERREUR d'EXECUTION 3144 ERREUR DE SYNTHAXE DANS L'INSTRUCTION UPDATE "

    c'est donc un problème de synthaxe

    Je serai bien ravi que vous m'aidiez à corriger cette synthaxe

    je galère un peu avec ce souci

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/10/2009, 17h01
  2. Réponses: 2
    Dernier message: 07/12/2007, 15h20
  3. [DB] Nombre d'enregistrements d'une table
    Par Mister Nono dans le forum Bases de données
    Réponses: 26
    Dernier message: 09/05/2006, 09h51
  4. Réponses: 10
    Dernier message: 01/08/2003, 13h45
  5. Trouver le dernier enregistrement d'une table
    Par remi59 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2003, 14h54

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