OVH Cloud OVH Cloud

Treeview basé sur une requête paramétrée

4 réponses
Avatar
Domi
Bonjour,

Je rencontre le problème suivant :

Un formulaire "Immeuble" dans lequel un treeview doit afficher les
logements, puis les locataires qui les occupent.

Pour "filtrer" les logements par immeuble, j'utilise une requête paramétrée
sur le numéro d'immeuble du formulaire, mais cela ne fonctionne pas, quelque
soit l'évenement du formualire utilisé (sur ouverture ou sur activation).
J'ai le message d'erreur suivant :

Erreur d'exécution 3'061. trop peu de paramètres. 1 attendu.

Et voici le code :

Function PeuplerTreeview()

'Peuple le TreeView du formulaire Immeubles

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim nodCurrent As Node, nodRoot As Node
Dim objTree As TreeView
Dim strText As String

Set db = CurrentDb

'Ouverture de la requête "qryImmLog"

'L'ERREUR ICI

Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Création de la référence à l'objet Treeview
'Set objTree = Me!Arborescence.Object
Set objTree = Forms!formImm!Arborescence.Object

'Création de la liste des logements
Do Until rst.EOF
'Extraction des logements
strText = rst!LogImmEntree & " - " & rst!LogEtage & " - " &
rst!LogNumeroGerance
Set nodCurrent = objTree.Nodes.Add(, , "a" & rst![LogId], strText)
nodCurrent.ForeColor = RGB(160, 160, 160)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing

'Ouverture de la requête "qryImmLog"
Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Ajout des locataires
Do Until rst.EOF
'Extraction des locataires
strText = rst!LocNom & " " & rst!LocPrenom
Set nodCurrent = objTree.Nodes.Add("a" & rst![LOCLogId], tvwChild,
"a" & rst![LOCId], strText)
nodCurrent.ForeColor = RGB(100, 100, 100)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing

End Function

A noter que cela fonctionne si j'indique le paramètre "en dur" dans ma
requête.

Mon idée est d'utiliser plutôt un filtre, mais je ne sais pas comment faire.

Merci de votre aide.

Domi

4 réponses

Avatar
Eric
Bonjour,

Je ferai comme ceci:
Créer un paramètre explicitement dans la requête en ouvrant la requête
en mode modification puis menu Requêtes|Paramètres
Soit pour l'exemple, Nom du paramètre : What, Type Long

Puis dans le code :
Dim rq as DAO.Querydef
Set rq = CurrentDb.QueryDefs("NomDeLaRequête")

' ici saisir la valeur du parametre par une InputBox ou
' passage de la valeur d'un champ de formulaire...

rq.Parameters!What = ... ' penser à convertir si necessaire
Set rs = rq.OpenRecordset
Le reste inchangé.
Enfin
set rq= Nohing

Ca marche ?

Bonjour,

Je rencontre le problème suivant :

Un formulaire "Immeuble" dans lequel un treeview doit afficher les
logements, puis les locataires qui les occupent.

Pour "filtrer" les logements par immeuble, j'utilise une requête paramétrée
sur le numéro d'immeuble du formulaire, mais cela ne fonctionne pas, quelque
soit l'évenement du formualire utilisé (sur ouverture ou sur activation).
J'ai le message d'erreur suivant :

Erreur d'exécution 3'061. trop peu de paramètres. 1 attendu.

Et voici le code :

Function PeuplerTreeview()

'Peuple le TreeView du formulaire Immeubles

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim nodCurrent As Node, nodRoot As Node
Dim objTree As TreeView
Dim strText As String

Set db = CurrentDb

'Ouverture de la requête "qryImmLog"

'L'ERREUR ICI

Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Création de la référence à l'objet Treeview
'Set objTree = Me!Arborescence.Object
Set objTree = Forms!formImm!Arborescence.Object

'Création de la liste des logements
Do Until rst.EOF
'Extraction des logements
strText = rst!LogImmEntree & " - " & rst!LogEtage & " - " &
rst!LogNumeroGerance
Set nodCurrent = objTree.Nodes.Add(, , "a" & rst![LogId], strText)
nodCurrent.ForeColor = RGB(160, 160, 160)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing

'Ouverture de la requête "qryImmLog"
Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Ajout des locataires
Do Until rst.EOF
'Extraction des locataires
strText = rst!LocNom & " " & rst!LocPrenom
Set nodCurrent = objTree.Nodes.Add("a" & rst![LOCLogId], tvwChild,
"a" & rst![LOCId], strText)
nodCurrent.ForeColor = RGB(100, 100, 100)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing

End Function

A noter que cela fonctionne si j'indique le paramètre "en dur" dans ma
requête.

Mon idée est d'utiliser plutôt un filtre, mais je ne sais pas comment faire.

Merci de votre aide.

Domi




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Domi
Bonjour aussi,

J'ai essayé de procéder comme tu me l'as indiqué, mais ça ne fonctionne pas
(encore) tout à fait.

J'ai maintenant une erreur 91 provoquée lors de la création des logements,
je pense que ma requête est vide.

Et effectivement, mon champ ImmNumero est de type texte. Mais je ne vois pas
comment le convertir.

Function PeuplerTreeview()

'Peuple le TreeView du formulaire Immeubles

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim rq As DAO.QueryDef
Dim nodCurrent As Node, nodRoot As Node
Dim objTree As TreeView
Dim strText As String


Set db = CurrentDb

Set rq = CurrentDb.QueryDefs("qryImmLog")

rq.Parameters!NumeroImmeuble = Forms!formImm!IMMNumero


'Ouverture de la requête "qryImmLog"
Set rs = rq.OpenRecordset
'Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Création de la référence à l'objet Treeview
'Set objTree = Me!Arborescence.Object
Set objTree = Forms!formImm!Arborescence.Object

'ERREUR 91 ICI - Création de la liste des logements
Do Until rst.EOF
'Extraction des logements
strText = rst!LogImmEntree & " - " & rst!LogEtage & " - " &
rst!LogNumeroGerance
Set nodCurrent = objTree.Nodes.Add(, , "a" & rst![LogId], strText)
nodCurrent.ForeColor = RGB(160, 160, 160)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set rq = Nothing

Merci pour ton aide.

Domi


Bonjour,

Je ferai comme ceci:
Créer un paramètre explicitement dans la requête en ouvrant la requête
en mode modification puis menu Requêtes|Paramètres
Soit pour l'exemple, Nom du paramètre : What, Type Long

Puis dans le code :
Dim rq as DAO.Querydef
Set rq = CurrentDb.QueryDefs("NomDeLaRequête")

' ici saisir la valeur du parametre par une InputBox ou
' passage de la valeur d'un champ de formulaire...

rq.Parameters!What = ... ' penser à convertir si necessaire
Set rs = rq.OpenRecordset
Le reste inchangé.
Enfin
set rq= Nohing

Ca marche ?

Bonjour,

Je rencontre le problème suivant :

Un formulaire "Immeuble" dans lequel un treeview doit afficher les
logements, puis les locataires qui les occupent.

Pour "filtrer" les logements par immeuble, j'utilise une requête paramétrée
sur le numéro d'immeuble du formulaire, mais cela ne fonctionne pas, quelque
soit l'évenement du formualire utilisé (sur ouverture ou sur activation).
J'ai le message d'erreur suivant :

Erreur d'exécution 3'061. trop peu de paramètres. 1 attendu.

Et voici le code :

Function PeuplerTreeview()

'Peuple le TreeView du formulaire Immeubles

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim nodCurrent As Node, nodRoot As Node
Dim objTree As TreeView
Dim strText As String

Set db = CurrentDb

'Ouverture de la requête "qryImmLog"

'L'ERREUR ICI

Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Création de la référence à l'objet Treeview
'Set objTree = Me!Arborescence.Object
Set objTree = Forms!formImm!Arborescence.Object

'Création de la liste des logements
Do Until rst.EOF
'Extraction des logements
strText = rst!LogImmEntree & " - " & rst!LogEtage & " - " &
rst!LogNumeroGerance
Set nodCurrent = objTree.Nodes.Add(, , "a" & rst![LogId], strText)
nodCurrent.ForeColor = RGB(160, 160, 160)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing

'Ouverture de la requête "qryImmLog"
Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Ajout des locataires
Do Until rst.EOF
'Extraction des locataires
strText = rst!LocNom & " " & rst!LocPrenom
Set nodCurrent = objTree.Nodes.Add("a" & rst![LOCLogId], tvwChild,
"a" & rst![LOCId], strText)
nodCurrent.ForeColor = RGB(100, 100, 100)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing

End Function

A noter que cela fonctionne si j'indique le paramètre "en dur" dans ma
requête.

Mon idée est d'utiliser plutôt un filtre, mais je ne sais pas comment faire.

Merci de votre aide.

Domi




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Eric
re,

Non, le probleme vient du fait que tu fais
Set *rs* = rq.OpenRecordset
et après tu utilises *rst* dans le code.
C'est de ma faute, je t'avais induit en erreur car je croyais que ta
variable Recordset était rs. Mea maxima culpa ;-)

donc
écris :
Set rst=rq.OpenRecordset

(Pour info :l'erreur 91 indique Variable Objet non définie.)

Si le IMMNumero est Texte, définis le paramètre NumeroImmeuble de la
requête en Texte, ca suffira.
Te reste à verifir que Forms!formImm!IMMNumero n'est pas Null ou une
chaine de longueur nulle.


Bonjour aussi,

J'ai essayé de procéder comme tu me l'as indiqué, mais ça ne fonctionne pas
(encore) tout à fait.

J'ai maintenant une erreur 91 provoquée lors de la création des logements,
je pense que ma requête est vide.

Et effectivement, mon champ ImmNumero est de type texte. Mais je ne vois pas
comment le convertir.

Function PeuplerTreeview()

'Peuple le TreeView du formulaire Immeubles
...

'Ouverture de la requête "qryImmLog"
Set rs = rq.OpenRecordset
'Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Création de la référence à l'objet Treeview
'Set objTree = Me!Arborescence.Object
Set objTree = Forms!formImm!Arborescence.Object

'ERREUR 91 ICI - Création de la liste des logements
Do Until rst.EOF
'Extraction des logements
strText = rst!LogImmEntree & " - " & rst!LogEtage & " - " &
rst!LogNumeroGerance
Set nodCurrent = objTree.Nodes.Add(, , "a" & rst![LogId], strText)
nodCurrent.ForeColor = RGB(160, 160, 160)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set rq = Nothing

Merci pour ton aide.



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Domi
:-)))

On ne peut mieux.

Merci encore et bonne soirée

Domi


re,

Non, le probleme vient du fait que tu fais
Set *rs* = rq.OpenRecordset
et après tu utilises *rst* dans le code.
C'est de ma faute, je t'avais induit en erreur car je croyais que ta
variable Recordset était rs. Mea maxima culpa ;-)

donc
écris :
Set rst=rq.OpenRecordset

(Pour info :l'erreur 91 indique Variable Objet non définie.)

Si le IMMNumero est Texte, définis le paramètre NumeroImmeuble de la
requête en Texte, ca suffira.
Te reste à verifir que Forms!formImm!IMMNumero n'est pas Null ou une
chaine de longueur nulle.


Bonjour aussi,

J'ai essayé de procéder comme tu me l'as indiqué, mais ça ne fonctionne pas
(encore) tout à fait.

J'ai maintenant une erreur 91 provoquée lors de la création des logements,
je pense que ma requête est vide.

Et effectivement, mon champ ImmNumero est de type texte. Mais je ne vois pas
comment le convertir.

Function PeuplerTreeview()

'Peuple le TreeView du formulaire Immeubles
...

'Ouverture de la requête "qryImmLog"
Set rs = rq.OpenRecordset
'Set rst = db.OpenRecordset("qryImmLog", dbOpenDynaset, dbReadOnly)

'Création de la référence à l'objet Treeview
'Set objTree = Me!Arborescence.Object
Set objTree = Forms!formImm!Arborescence.Object

'ERREUR 91 ICI - Création de la liste des logements
Do Until rst.EOF
'Extraction des logements
strText = rst!LogImmEntree & " - " & rst!LogEtage & " - " &
rst!LogNumeroGerance
Set nodCurrent = objTree.Nodes.Add(, , "a" & rst![LogId], strText)
nodCurrent.ForeColor = RGB(160, 160, 160)
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set rq = Nothing

Merci pour ton aide.



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr