Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Runtime
Runtime Forum destiné à recevoir toutes vos questions concernant le Runtime (empaquetage, déploiement...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2006, 15h51   #1
Membre habitué
 
Inscription : mars 2006
Messages : 398
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mars 2006
Messages : 398
Points : 109
Points : 109
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.
cotmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 18h41   #2
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 938
Points : 7 938
bjr,

exécuté un Requery sur la liste

Code :
1
2
 
me.MaListe.Requery
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 18h53   #3
Membre habitué
 
Inscription : mars 2006
Messages : 398
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mars 2006
Messages : 398
Points : 109
Points : 109
Bonjour,

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

En fait le code de ma fonction est le suivant :

Code :
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 :
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.
cotmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 18h57   #4
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 19h10   #5
Membre habitué
 
Inscription : mars 2006
Messages : 398
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mars 2006
Messages : 398
Points : 109
Points : 109
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é.
cotmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 21h28   #6
Membre habitué
 
Inscription : mars 2006
Messages : 166
Détails du profil
Informations personnelles :
Âge : 34
Localisation : Canada

Informations forums :
Inscription : mars 2006
Messages : 166
Points : 145
Points : 145
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.
__________________
N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.
Caroline1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 22h16   #7
Membre habitué
 
Inscription : mars 2006
Messages : 398
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mars 2006
Messages : 398
Points : 109
Points : 109
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.
cotmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 22h43   #8
Membre habitué
 
Inscription : mars 2006
Messages : 166
Détails du profil
Informations personnelles :
Âge : 34
Localisation : Canada

Informations forums :
Inscription : mars 2006
Messages : 166
Points : 145
Points : 145
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 :
Form_FrmFormulaireIncident.NumSite.Requery
Dis nous ce que ça fait.
__________________
N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.
Caroline1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 11h17   #9
Membre habitué
 
Inscription : mars 2006
Messages : 398
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mars 2006
Messages : 398
Points : 109
Points : 109
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.
cotmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h14   #10
Membre habitué
 
Inscription : mars 2006
Messages : 398
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mars 2006
Messages : 398
Points : 109
Points : 109
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.
cotmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 19h20   #11
Membre habitué
 
Inscription : mars 2006
Messages : 166
Détails du profil
Informations personnelles :
Âge : 34
Localisation : Canada

Informations forums :
Inscription : mars 2006
Messages : 166
Points : 145
Points : 145
-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...)
__________________
N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.
Caroline1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 19h29   #12
Membre habitué
 
Inscription : mars 2006
Messages : 398
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mars 2006
Messages : 398
Points : 109
Points : 109
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.
cotmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2006, 13h57   #13
Membre habitué
 
Inscription : mars 2006
Messages : 398
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mars 2006
Messages : 398
Points : 109
Points : 109
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.
cotmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h16.


 
 
 
 
Partenaires

Hébergement Web