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 :

Comment détecter quel recordsource alimente une liste? [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 338
    Points : 229
    Points
    229
    Par défaut Comment détecter quel recordsource alimente une liste?
    Bonjour,

    Dans un formulaire générique, j'ai une liste, avec sélection simple, qui est alimentée par des requètes SQL différentes (en fonction de choix de l'utilisateur).
    La première requête (qui est celle qui alimente la liste par défaut au démarage du fromualire) a "TransactionID" comme nom du premier champ
    La seconde requête a "PurchaseOrderID" comme nom du premier champ
    Donc en fonction du choix X d'un utilisateur, la première requête est affectée à la liste comme source de données(row source).
    Et en focntion du choix Y d'un utilisateur, la seconde requête est affectée à la liste comme source de données (row source).


    Ce que je souhaiterai, c'est pouvoir détecter, lors d'un double clic sur la liste, quel est sa source courante et en fonction de cela lancer des actions adaptées.

    J'ai donc imaginé de tester le nom du premier champ de la source qui alimente la liste.

    Lorsque c'est la première requète, pas de problème, quand je double cique dans la liste, mon msgbox me retourne bien le nom du premier champs. Je change donc de source de données et là ça ne fonctionne plus. J'ai un message d'erreur.


    Voici ci-dessous mon code que j'ai mis sur le double-click de la liste:
    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
     
    Private Sub ListGeneral_DblClick(Cancel As Integer)
    'ATTENTION
    'Quand on clique sur la liste, il faut tester d'abord de quelle source il s'agit puis réaliser les actions en fonction du résultat
     
    Dim rst As DAO.Recordset
    Dim fld As Field
    Dim nom As String
     
    Me.ListGeneral.RowSource = Me.ListGeneral.RowSource 'pour réaffecter le recordsource courant
     
    Set rst = Me.ListGeneral.Recordset
     
    nom = rst.Fields(0).Name
    'MsgBox CStr(rst.Fields(0).Name) pour tester si c'est bien le nom attendu
     
    Select Case nom
        Case "TransactionID"
            MsgBox "liste générale"
        Case "PurchaseOrderID"
            MsgBox "liste des purchase orders"
        Case Else
    End Select
     
    nom = ""
    rst.Close
    Set rst = Nothing
     
    End Sub
    Avez-vous une idée pour pallier cela?

    Merci et à Bientôt!!!

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 286
    Points : 383
    Points
    383
    Par défaut Une solution de contournement ?
    Bonjour,
    Pour ma part, je définirais une variable publique
    que je renseignerais par exemple à "1" quand j'utilise la première requete et à "0" quand j'utilise la deuxième.

    Il ne te resterait plus qu'à tester la valeur de cette vvariable pour savoir quel est le code SQL utilisé pour la dernière fois (donc celui qui est en cours d'utilisation).

    ... enfin si j'ai bien compris la question

    Michel

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 338
    Points : 229
    Points
    229
    Par défaut
    Bonjour Orion,

    Merci pour ta réponse! C'est effectivement une solution qui sera efficace et à laquelle je n'avais pas pensé en restant focalisé sur la compréhension du pourquoi ça ne marchait pas. Je vais la mettre en oeuvre pour le moment.

    Mais malgré tout, je suis intéréssé de savoir comment faire sans passer par une variable globale. Je pense que ça doit être possible(entre autre parceque mon code marche en partie). Le problème semble lié à la réactualisation de la variable "nom" qui ne récupère pas la valeur du nom du premier champs du recordset...

    Donc si quelqu'un a une idée

    A bientôt

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 338
    Points : 229
    Points
    229
    Par défaut j'ai testé la variable globale et ça fonctionne aussi bien

    Je pense que j'ai trouvé!

    En déclarant un recordset sur base du rowsource de la liste, ca roule parfaitement!!

    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
     
    Dim rst As DAO.Recordset
    Dim nom As String
     
    Set rst = CurrentDb.OpenRecordset(CStr(Me.ListGeneral.RowSource))
     
    nom = CStr(rst.Fields(0).Name)
     
        Select Case nom
        Case "TransactionID"
            MsgBox "liste générale " & CStr(rst.Fields(0).Name)
        Case "PurchaseOrderID"
            MsgBox "liste des purchase orders " & CStr(rst.Fields(0).Name)
        Case Else
        End Select
     
     
    rst.Close
    Set rst = Nothing
    encore pour le soutien!

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

Discussions similaires

  1. Comment détecter l'ouverture d'une session, sans dll ?
    Par yosthegost dans le forum Delphi
    Réponses: 4
    Dernier message: 24/05/2006, 19h58
  2. Réponses: 3
    Dernier message: 15/05/2006, 16h09
  3. [Servlet] Comment détecter la fin d'une session HTTP
    Par cocula dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/04/2005, 17h27
  4. Comment détecter la frappe d'une touche ?
    Par Bubonik software dans le forum C
    Réponses: 17
    Dernier message: 11/12/2003, 21h52
  5. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

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