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

Runtime Discussion :

Modifier la source de donnée d'une listBox au runtime ?


Sujet :

Runtime

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut Modifier la source de donnée d'une listBox au runtime ?
    Bonjour,

    Voilà mon souci aujourd'hui.

    J'ai une zone de liste en Access 2003 que j'ai paramétré et je récupére le contenu d'une requête que j'ai stoqué par ailleur.

    Cette zone de liste contient 3 colonnes (la première est affectée à la value de ma zone de liste et les deux suivantes sont affectées à deux textBox.

    Plus concrêtement pour vous présenter mon cas je sélectionne un numéro de zone géographine dans ma zone de liste déroulante (et je vois en même temps la ville et la région qui lui correspondent) et quand je fais ma sélection, une textBox reçoit la nom de la ville et l'autre le nom de la région.
    Jusque là tout va bien.

    Sauf que certains utilisateurs ont accés dans cet écran seulement à une région (la leur)... Là dessus je récupère bien le nom de la région au momment du login dans la table qui va bien. Je veux donc dans certains cas que la requète que j'ai passé en paramètre à ma zone de liste en tant que source de donnée soit remplécé dans mon programme par une nouvelle requête qui aura pour paramètre le nom de la région. Ors apparemment la requète ne s'exécute pas et je ne récupère pas dans ma zone de liste le résultat de la requête.

    Voilà toute ma question. J'espère avoir été clair. Si quelqu'un peut m'aider ? Je suis un peut désespéré en fait.

    Marco.

  2. #2
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    bjr,

    exécuté un Requery sur la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    me.MaListe.Requery

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Bonjour,

    Oui merci Arkham46. Je fais bien ça...

    En fait le code de ma fonction est le suivant :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Public Function FctRechercheDroitsFicheIncident( _ 
        ByVal StrDroits As String, _ 
        ByVal StrRegion As String, _ 
        ByVal StrStatut As String, _ 
        ByVal StrUser As String) As Boolean 
     
    Dim SQL             As String 
    Dim SQLRegion       As String 
    Dim db              As DAO.Database 
    Dim rs              As DAO.Recordset 
    Dim LngIndex        As Long 
     
        On Error GoTo ErrHandler 
     
        FctRechercheDroitsFicheIncident = False 
     
        SQL = "SELECT Incident.NumIncident, Incident.Typologie, Incident.NumSite, Incident.DatIncident, Incident.NomRedacteur, Incident.TypIncident, Incident.MatIncident, Incident.EquipIncident, Incident.DatAnalyseNational, Incident.ResponsableAnalyse, Incident.OuvertLe, Incident.ClosLe, Incident.ClosPar, Incident.CompteRendu, Incident.MesuresSecurisationIntermédiaires, Incident.DateAnalyse, Incident.ResultatAnalyse, Incident.ChefDeProjetRegional, Incident.ChefDeProjetNational, Incident.Statut" & _ 
            " FROM ((Region INNER JOIN Ville ON Region.NomRegion = Ville.Region) INNER JOIN (Site INNER JOIN Incident ON Site.Site = Incident.NumSite) ON Ville.Ville = Site.Ville) INNER JOIN Login ON Region.NomRegion = Login.Region" '& _ 
            " WHERE Incident.NumIncident='" & Form_FrmListeDesIncidents.LstResultQuery.ItemsSelected(0) 
     
      
        If StrDroits <> CstAdmin Then 
            If StrRegion = "NAT" Then 
            'Si le code région est : "National" 
                SQL = SQL & " WHERE (((Incident.Statut)='" & "Public" & "'))" 
    '            SQL = SQL & " AND (((Incident.Statut)='" & "Public" & "'))" 
            Else 
            'Sinon : c'est une des 6 régions 
                SQL = SQL & " WHERE (((Incident.Statut)='" & "Public" & "')) OR (((Region.NomRegion)='" & StrRegion & "'))" 
    '            SQL = SQL & " AND (((Incident.Statut)='" & "Public" & "')) OR (((Region.NomRegion)='" & StrRegion & "'))" 
     
                SQLRegion = "SELECT Site.Site, Ville.Ville, Region.NomRegion" & _ 
                    " FROM (Region INNER JOIN Ville ON Region.NomRegion = Ville.Region) INNER JOIN Site ON Ville.Ville = Site.Ville" & _ 
                    " WHERE (((Region.NomRegion)='" & StrRegion & "'));" 
            End If 
        Else 
         
        End If 
         
        SQL = SQL & " ;" 
         
        Set db = DBEngine.Workspaces(0).Databases(0) 
     
        Set rs = db.OpenRecordset(SQL, DB_OPEN_DYNASET) 
     
    '===>    La partie qui m'intéresse est ici... 
     
        If Not rs.NoMatch Then 
            Form_FrmFormulaireIncident.RecordSource = SQL 
             
    '        If Trim(SQLRegion) <> "" Then 
             
                Form_FrmFormulaireIncident.NumSite.RowSourceType = "Table/Query" 
                Form_FrmFormulaireIncident.NumSite.RowSource = ReqLocalisationRegion 'SQLRegion 
    '            Set rs = Nothing 
                                           
    '            Set rs = db.OpenRecordset(SQLRegion, DB_OPEN_DYNASET) 
    '            Set Form_FrmFormulaireIncident.NumSite.Recordset = rs 
                Form_FrmFormulaireIncident.Requery 
    '        End If 
             
        Else 
            Err.Description = "Aucun incident ne correspond aux critères sélectionnés" 
            Err.Raise 1 
        End If 
     
        FctRechercheDroitsFicheIncident = True 
         
    ExitHandler: 
        Set rs = Nothing 
        Set db = Nothing 
        Exit Function 
     
    ErrHandler: 
    Resume 
        MsgBox Err.Description, vbExclamation, CstAppName 
        FctRechercheDroitsFicheIncident = False 
        Resume ExitHandler 
             
    End Function
    Et la requète intitulée : ReqLocalisationRegion contient le code SQL suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Site.Site, Ville.Ville, Region.NomRegion 
    FROM (Region INNER JOIN Ville ON Region.NomRegion = Ville.Region) INNER JOIN Site ON Ville.Ville = Site.Ville 
    WHERE (((Region.NomRegion)=[Formulaires]![Form_FrmFormulaireIncident]![TxtRegionParam].[Value]));
    TxtRegionParam est un champs invisible que j'alimente au momment du chargement de mon formulaire avec une variable déclarée en public au niveau de mon formulaire.

    Merci en tous les cas si tu peux m'aider, car je commence sèrieusement à en perdre mon latin.

    Marco.

  4. #4
    Expert éminent

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Je n'ai pas vu le requery sur la zone de liste

    Quant à ceci :

    Set Form_FrmFormulaireIncident.NumSite.Recordset = rs

    Pourquoi ne pas lui affecter la source SQL du recordset plutot que le recordset en lui même que tu détruis à la fin du code EDIT : Oups j'avais pas vu que c'était en commentaire

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Oui pardon,

    Les commentaires n'aident peut être pas à la relecture de mon source, mais par contre, je l'ai laissé de manière à montré que j'ai essayé les deux solutions et que ni l'une ni l'autre ne marchent.

    Pour ce qui est de lapremière partie de mon code, c'est aussi pour monter que ça marche au moins un fois et ensuite plus moyen.

    Merci si tu peux m'aider en tous les cas.

    Marco un peut désespéré.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Par défaut
    Citation Envoyé par Tofalu
    Je n'ai pas vu le requery sur la zone de liste
    +1.
    Il y a bien Form_FrmFormulaireIncident.Requery... mais la liste dont tu parles est-elle Dépendante du formulaire? Sinon, il faut explicitement lui envoyer un Me.MaListe.Requery.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Bonsoir Caroline (ou bonjour car je ne sais pas à quelle heure tu trouveras ce messge depuis Québec),

    En tous les cas merci de ta réponse.

    En fait cette zone de liste n'est pas dirctement dépendante du formulaire... Par contre la valeur de sa propriété value sera par la suite enregistrée dans la "table principale" du formulaire.

    Mais le contenu de la liste doit être dépendante des droits de l'utilisateur. En effet à quoi servirait il que l'utilisateur voit des endroits qui ne sont pas dans sa région ? En fait c'est un élément que je n'avais pas vu au départ et que je rajoute maintenant pour améliorer mon interface.

    J'essayerais de voir ce dont tu me parles demain. Mais je ne suis pas sur que celà améliore les choses en fait.

    Par contre, je pense à autre chose... La source de donnée estdéclarée dand les propriétés de mon formulaire (en dur dans l'interface) : est ce que lorsque je fais un requery de mon formuilaire ça n'écrase pas le résultat de ce que j'essaye d'affecter à ce contrôle dynamiquement par le code ? J'ai remarqué qu'il y avait un un requery sur le formulaire juste après l'appele à la procédure que j'ai inséré dans mon précédent message juste avant de partir.

    Qu'en dites vous ? Je ne sais pas si je suis bien clair là ?

    A bientôt et merci à tous les deux et à ceux qui voudront bien m'aider.

    Marco.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Par défaut
    Citation Envoyé par cotmar
    Bonsoir Caroline (ou bonjour car je ne sais pas à quelle heure tu trouveras ce messge depuis Québec),
    6h de décalage avec la France (tropppppp facile comme question )


    Si "NumSite" de Form_FrmFormulaireIncident.NumSite est bien ta fameuse liste, il te faudrait ajouter la ligne suivante après .RowSource.
    (et si NumSite est bien ta liste, une bonne habitude est d'utiliser des Conventions de nommage. NumSite deviendrait lstNumSite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form_FrmFormulaireIncident.NumSite.Requery
    Dis nous ce que ça fait.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Bonjour Caroline,

    Je pense donc qu'à l'heure ou j'écrit ces lignes tu seras encore dans les bras de Morphée. Veinarde va.

    En fait ça n'a rien donné. j'ai bien esasyé comme tu me l'as dit, mais rien ne se passe.

    J'ai modifié ma requète pour mettre une requète paramétrée dans la source de données du formulaire (avec un champs caché que j'alimente au momment du chargement).

    Là en ce momment j'ai un autre effet de bord... Apapremment il vide le contenu des chaps que j'ai en public à un momment donné... Dont ceux qui m'intéressent. Ce qui fait que quand je clique sur le boutton de ma combo pour faire une sélection il m'envoie une boite de dialogue pour lui donner la valeur de l'argument...

    J'ai un peut l'impression de tourner en rond.

    Merci et à plus tard.

    Marco.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Salut,

    Il y a quand même un problème car quoi que je fasse, dans le code ou dans le formulaire, ma requête paramétrée avec en paramètre un champs caché ne marche pas... Elle me demande systématiquement de rentrer le paramètre dans un boite de dialogue, dès que je clique sur le bouton de la zone de liste pour en voir le contenu.

    La requète est toujours celle intitulée "ReqLocalisationRegion" que j'avais donné quelques messages plustôt.

    Cette fois ci j'ai bien regardé, je fais bien le requery sur la zone de liste...

    Est ce que vous auriez une idée ?

    A bientôt.

    Marco.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Par défaut
    -Codes-tu avec Option Explicit?
    -As-tu regardé qu'il ne manquait pas de guillemets dans ta requête?
    -As-tu placé des points d'arrêts / utilisé Debug.Print et la fenêtre espion? (y'a des tuto et des réponses dans la FAQ sur ça, si tu en as besoin.)

    Caroline
    (je ne pourrai pas revenir sur le forum aujourd'hui. Plein de boulots...)

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Bonsoir Caroline (ou bonjour je sais plus bien ),

    Merci de ta réponse.

    En fait j'utilise bien "Option Explicit". C'est vrai que j'ai pas utilisé le "Debug.Print" mais effectivement c'est une très bonne idée.
    Pour les points d'arrêt oui j'en utilise autant que possible.

    Un des problème est résolu : la réunitialisation accdentelle de certaiones variables publiques à mon formulaire : je faisais appel à un momment donné à une fonction dans un module et dedans j'avais pas fais attention que les mêmes variables étaient passées en ByVal (donc à la sortie elle étaient "vidées" de leur contenu). Subtil n'est ce pas ?

    Il me reste encore pas mal d'efforts à fournir pour que ça marche correctement mais bon. Je pense que c'est sur la bonne voie.

    A très bientôt et peut être à demain. N'hésites surtout pas si tu as des idées à me donner pour m'aider.

    Bon courage.

    Marco qui rentre à la maison maintenant.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Par défaut
    Bonjour à tous,

    Plus aucune suggestion sur ce sujet ?

    Je voulais juste ajouter un petit commentaire sur mon source.
    Le resume dans la paragraphe de traitement d'erreurs me sert juste pour le débogage (j'y mets un point d'arrêt dessus pour voir qu'est ce qui fait planter et il est évident qu'ensuite pour éviter d'avoir des boucles infinies en cas de problèmes il me faut 'enlever).

    Voilà.

    Bon week end prolongé à tous et à tous et à demain mardi.

    Marco.

Discussions similaires

  1. [CR XI] modifier la source de données d'une procédure stockée vers une commande
    Par battl14 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 18/05/2011, 14h28
  2. modifier la source de donnée d'une dataset
    Par mounim_taoufik dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/01/2010, 08h47
  3. Réponses: 16
    Dernier message: 20/03/2006, 23h21
  4. source de données d'une listbox?
    Par gdkenny dans le forum ASP.NET
    Réponses: 5
    Dernier message: 09/03/2006, 17h11
  5. source de donnée d'une LOV
    Par oradevelop dans le forum Oracle
    Réponses: 2
    Dernier message: 28/04/2005, 13h36

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