Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1896 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1358751
cotmar
Posté le 03-05-2006 à 15:55:57  profilanswer
 

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.


---------------
Marco
mood
Publicité
Posté le 03-05-2006 à 15:55:57  profilanswer
 

n°1358902
tegu
Posté le 03-05-2006 à 17:30:09  profilanswer
 

Quand tu dis que la requête ne s'exécute pas, cela veut-il dire que le contenu de la liste se vide ? Y a-t-il un message d'erreur ? Ou alors le contenu ne change pas ?
As-tu fait un .requery sur le contrôle listbox/combobox ?

n°1358915
cotmar
Posté le 03-05-2006 à 17:38:34  profilanswer
 

Bonsoir Tegu,
 
Décidément tu es souvent fidèle au poste. ;)
 
En fait je n'ai pas de message d'erreur (à un momment j'avais fait en affectena tl amême requète à un recordset de la listbox et là j'ai eu une erreur).
 
Mais sinon, le contenu ne change pas et je n'ai pas de message d'erreur. Et aussi j'ai bien regardé, je fais le requery.
 
Merci de ta réponse.
 
Marco.


---------------
Marco
n°1358941
tegu
Posté le 03-05-2006 à 17:47:10  profilanswer
 

Essaye de créer deux requêtes statiques Access contenant l'une ta requête globale accédant à toutes les régions, l'autre avec un filtre sur une région donnée.
Ensuite dans ta proprité recordsource (suis plus sûr du nom), au lieu de mettre la chaine SQL, mets le nom de ces requêtes et switch entre les deux comme tu devrais le faire normalement.
Si ça marche, c'est déjà pas le principe de ton code qui est foireux et il faudra remettre en question la syntaxe SQL ou autre chose.
 
edit: bien sûr tes requêtes devront avoir fonctionner d'abord indépendament de ton code pour dire que le code fonctionne :)


Message édité par tegu le 03-05-2006 à 17:50:03
n°1358983
cotmar
Posté le 03-05-2006 à 18:13:55  profilanswer
 

Salut,
 
Donc voilà mes requêtes :
 
1 -> Celle simple et sans paramètres :
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;
 
2 -> Celle qui sélectionne en fonction de la région souhaitée :
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)="MED" ));
 
3 -> Celle qui va chercher le nom du champs dans un champs texte :
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]));
 
Pour être pluis précis, je passe dans mon code la valeur d'une variable publique à mon formulaire (au chargement) à un champs texte caché (TxtRegionParam). mais ce n'est peut être pas la meilleure manière de faire ?
 
Autrement en général, je génére les requêtes avec le QBE d'Access et ensuite, soit j'enregistre, soit je les copie dans mon code pour avoir le résultat souhaité. Ainsi ça doit pouvoir éviter de trops grosses erreurs... Ces trois requêtes donnent un résultat quand je les exécute dans l'éditeur de requêtes.
 
Je te poste le code de ma fonction dans le post suivant pour as trops surcharger celui-ci.
 
Marco.
 
 


---------------
Marco
n°1358984
cotmar
Posté le 03-05-2006 à 18:17:43  profilanswer
 

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


Message édité par cotmar le 03-05-2006 à 18:18:27

---------------
Marco
n°1358995
tegu
Posté le 03-05-2006 à 18:36:05  profilanswer
 

Ça ne serait pas là ton problème ?

If Not rs.NoMatch Then


Tu ne fais aucune recherche au préalable, donc le flag .nomatch n'a rien à faire là
Il faut utiliser .BOF plutôt.
Mais je ne suis pas sûr de l'état d'initialisation de ce flag sans recherche auparavant, aussi peut-être cela passe quand même dans le code du If mais j'ai un doute.


Message édité par tegu le 03-05-2006 à 18:36:26
n°1358999
cotmar
Posté le 03-05-2006 à 18:46:40  profilanswer
 

Salut,
 
En fait comme tu peux e voir, dans ma fonction j'enchaîne deux requêtes. La première passe bien passe même le "nomatch", mais la seconde n'a pas l'air de s'exécuter. Je l'ai fais dérouler en pas à pas et apparemment ça ne produit pas d'effets bien que le curseur d'exécution passe sur la ligne de code qui contient : Form_FrmFormulaireIncident.NumSite.RowSource = ReqLocalisationRegion .
 
J'avoue que je commence à en perdre quelques peut mon latin en fait.
 
Merci en tous les cas si tu peux m'aider.
 
A bientôt.
 
Marco.


---------------
Marco
n°1359004
tegu
Posté le 03-05-2006 à 19:00:05  profilanswer
 

Heu entre ce que je t'ai demandé de tester et ton code original je ne suis pas sûr de moi, mais ta variable ReqLocalisationRegion contient quoi à l'exécution ?
Je vois pas d'initialisation là
edit: si c'est le nom de ta requête faut les guillemets


Message édité par tegu le 03-05-2006 à 19:02:03
n°1359011
cotmar
Posté le 03-05-2006 à 19:12:08  profilanswer
 

Oui en fait c'est bien le nom de ma requète.
Mais avec ou sans ça donne le même résultat.


---------------
Marco
mood
Publicité
Posté le 03-05-2006 à 19:12:08  profilanswer
 

n°1359177
tegu
Posté le 04-05-2006 à 08:48:29  profilanswer
 

Autre sérieuse piste, je vois que ton .requery ne se fait que sur le formulaire (Form_FrmFormulaireIncident.Requery)
Il faut le faire sur la combobox surtout (Form_FrmFormulaireIncident.NumSite.Requery )
Désolé de ne pas l'avoir vu avant.


Message édité par tegu le 04-05-2006 à 08:49:25
n°1359340
cotmar
Posté le 04-05-2006 à 11:14:45  profilanswer
 

Bonjour Tegu,
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.
J'ai un peut l'impression de tourner en rond.
Merci et à plus tard.
Marco.


---------------
Marco
n°1359347
tegu
Posté le 04-05-2006 à 11:17:13  profilanswer
 

Je crois que je ne pourrais pas plus t'aider. Le forum n'est pas idéal pour certains problèmes et sans ta base dans les mains j'aurais du mal à aller plus loin. Désolé.
J'ai fait du code de ce genre des dizaines de fois et je ne m'explique pas que tu rencontres autant de soucis.


Message édité par tegu le 04-05-2006 à 11:19:15
n°1359398
cotmar
Posté le 04-05-2006 à 11:58:20  profilanswer
 

Salut Tegdu,
 
En fait j'ai changé mon fusil d'épaule et je mets une requête paramétrée dans les propriétés de la zone de liste (avec un champs caché).
 
Ca a l'air de mieux marcher. Maintenant j'ai un autre problème, c'est que apapremment je perds certaines valeurs en route (la variable publique au formulaire qui me sert ) alimenter ce champs)...
 
Merci en tous els cas.
 
A bientôt.
 
Marco.


---------------
Marco

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
cherche source puissance 4 C (mode console sans IA)Renvoyer à la ligne les phrases s'affichant dans une listbox
problème d'insertion ds une base de donnée depuis un site... [PHP] Extraire les liens http dans un code source html
[C++] Modifier l'onglet Récupération de la gestion d'un serviceUserform Listbox et affichage d'info
convertir base de donnée excel en base de donnée SQLenvoyer une donnée dans excel depuis une textbox
Base de donnée locale. Que choisir ?[Aide] Code source toolbar ....
Plus de sujets relatifs à : Modifier la source de donnée d'une listBox au runtime ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)