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

Access Discussion :

Récupération du n° d'identifiant d'un item affiché dans un formulaire [AC-2007]


Sujet :

Access

  1. #1
    Membre habitué Avatar de Ju1.0
    Homme Profil pro
    Ingénieur Automaticien
    Inscrit en
    Novembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 125
    Points : 158
    Points
    158
    Par défaut Récupération du n° d'identifiant d'un item affiché dans un formulaire
    Bonjour

    alors voila :

    J'ai une table qui s'appelle "AP" qui ressence tout les automates de mon client, et un autre, "Standards" qui recense touts les standards de programmation de ce même client. Entre les 2, il y a une Table "StandardsInstalles" qui fait le lien, pour savoir quel standard est installé dans quel AP, en se liant sur les n°identifiants de "AP" et "Standards" ("AP" et "Standards" sont du coté 1 de la relation avec "StandardsInstalles")

    Jusque là tout va bien

    J'ai un formulaire "VueAP" qui me permet de voir les info d'un AP à la fois, qui contient un sous-formulaire qui va chercher dans une requête les données qui correspondent aux standards installées (en allant taper dans des tables derrière "Standards"). La requête fonctionne bien.

    La où ça se complique, c'est quand je veux ajouter un standard à un AP (soit un nouveau champ dans "StandardsInstalles")
    Pour ça, j'ai un listbox dans mon formulaire principale qui liste les standards, et un bouton à coté qui contient le code
    Ca marche bien, sauf pour (c'est dans le titre) récupérer le n° d'identifiant de l'AP. J'utilise la méthode GetRows avec Me.CurrentRecord, et je vais piocher dans le résultat de la méthode
    Et là, ça me retourne (ligne 24 du code) le n° d'Id de 143 ligne en dessous de celui que j'attends.

    J'ai tendance à penser que ça ne viens pas du code, car j'ai recopié cette technique d'une autre partie de la base fonctionnant de la même manière, après, je suis pas expert en BDD

    Si vous avez des pistes pour corriger ça, où même une autre solutions, je suis preneur
    Merci d'avance

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Private Sub BtnInsertStd_Click()
     
        Dim dbBCV As Database
        Dim rctStdAP As Recordset
        Dim rctAPs As Recordset
        Dim vAPData As Variant
        Dim vIdAP As Variant
        Dim lActiveData As Long
     
        'Récupération du n° d'AP
        lActiveData = Me.CurrentRecord
     
        'Test d'un std bien sélectionné
        If Not IsNumeric(LstBxStandards.Value) Then Exit Sub
     
    'Ajout du standard au projet
        'définition de la base et ouverture des tables
        Set dbBCV = CurrentDb
        Set rctStdAP = dbBCV.OpenRecordset("StandardsInstalles", dbOpenTable)
        Set rctAPs = dbBCV.OpenRecordset("AP", dbOpenTable)
     
        'récupération de l'Id AP
        vAPData = rctAPs.GetRows(lActiveData)
        vIdAP = vAPData(iAPChampIdAP, lActiveData - 1)
     
        'Ajout du std dans l'AP
     
        With rctStdAP
            .AddNew
            .Fields(iStdAPChampIdAP).Value = vIdAP
            .Fields(iStdAPChampIdStd).Value = LstBxStandards.Value
            .Update
        End With
     
        'fermeture tables et base
     
        rctStdAP.Close
        Set rctStdAP = Nothing
     
        rctAPs.Close
        Set rctAPs = Nothing
     
        dbBCV.Close
        Set dbBCV = Nothing
     
        'actualisations des données du formulaire
        Me.Requery
        Me.Refresh
     
    End Sub
    Merci d'avoir lu ce roman. Je serai en dédicace à la Fnac St. Lazare demain vendredi 32 Juillet rayon CD black métal

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Pourquoi faire simple quand on peut faire compliquer. Ou il y a des données que nous ne savons pas.
    Est-ce que vous connaissez la technique des formulaires Pères/Fils comme expliqué dans le tutoriel ici.
    A mon avis, votre problème peut facilement être résolu avec.

    Une petite base exemple est jointe.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre habitué Avatar de Ju1.0
    Homme Profil pro
    Ingénieur Automaticien
    Inscrit en
    Novembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    Merci pour ta réponse

    Mais ce n'est pas le problème de lien de paternité entre formulaires. C'est en place, et ça marche bien. Les standards s'affichent bien quand on regarde un AP qui les contient.
    Le problème, c'est à l'ajout de standards pour un AP. L'Id standards ajouté n'est pas celui que j'attends.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        vAPData = rctAPs.GetRows(lActiveData)
        vIdAP = vAPData(iAPChampIdAP, lActiveData - 1)
    vIdAP est dans les choux !

    Extrait choisi de la base
    BCV.zip
    On voit que la même technique d'ajout à été utilisé entre les tables Projets et Standards, et là, ça fonctionne à merveille. C'est aussi pour ça que je ne comprends pas pourquoi cette technique ne fonctionne pas entre AP et Standards

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Je ne sais pas où vous avez pris le code, mais pour faire référence à l'enregistrement courant d'un formulaire il suffirait de faire Me.LeNomduControle. Ce qui donnerait pour l'Id courant de votre Ap : Me.IdAP. Donc nous aurons un code (J'ai mis en commentaire les lignes inutiles) :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Private Sub BtnInsertStd_Click()
     
        Dim dbBCV As Database
        Dim rctStdAP As Recordset
        Dim rctAPs As Recordset
        Dim vAPData As Variant
        Dim vIdAP As Variant
        Dim lActiveData As Long
     
        'Récupération du n° d'AP
        'lActiveData = Me.CurrentRecord 'pas besoins
     
        'Test d'un std bien sélectionné
        If Not IsNumeric(LstBxStandards.Value) Then Exit Sub
     
    'Ajout du standard au projet
        'définition de la base et ouverture des tables
        Set dbBCV = CurrentDb
        Set rctStdAP = dbBCV.OpenRecordset("StandardsInstalles", dbOpenTable)
        Set rctAPs = dbBCV.OpenRecordset("AP", dbOpenTable)
     
        'récupération de l'Id AP
        'vAPData = rctAPs.GetRows(lActiveData)
        'vIdAP = vAPData(iAPChampIdAP, lActiveData - 1)
     
        'Ajout du std dans l'AP
     
        With rctStdAP
            .AddNew
         '   .Fields(iStdAPChampIdAP).Value = vIdAP
            .Fields(iStdAPChampIdAP).Value = Me.IdAP
            .Fields(iStdAPChampIdStd).Value = LstBxStandards.Value
            .Update
        End With
     
        'fermeture tables et base
     
        rctStdAP.Close
        Set rctStdAP = Nothing
     
        rctAPs.Close
        Set rctAPs = Nothing
     
        dbBCV.Close
        Set dbBCV = Nothing
     
        'Remise en état initials des contrôles d'ajout de standards
        'bouton
        LstBxTypeStandard.SetFocus
        BtnInsertStd.Enabled = False
        'choix standards
        LstBxStandards.Value = ""
        LstBxStandards.Enabled = False
        'choix type
        LstBxTypeStandard.Value = ""
     
        'actualisations des données du formulaire
        Me.Requery
        Me.Refresh
     
    End Sub
    Cordialement,

    EDIT : Prenez l'habitude de compacter votre BD avant de la zipper et la poster sur le site.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Membre habitué Avatar de Ju1.0
    Homme Profil pro
    Ingénieur Automaticien
    Inscrit en
    Novembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 125
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par madefemere Voir le message
    Bonjour,

    Pourquoi faire simple quand on peut faire compliquer.


    C'était tellement simple en fait

    N'empèche que je comprends pas ce qui ne marchait pas dans mon code, mais nous n'aurrons probablement jamais la réponse ...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/01/2012, 20h45
  2. Réponses: 6
    Dernier message: 16/02/2010, 21h34
  3. Réponses: 0
    Dernier message: 24/08/2009, 16h09
  4. Réponses: 4
    Dernier message: 27/06/2007, 14h50
  5. Réponses: 11
    Dernier message: 24/05/2007, 12h02

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