OVH Cloud OVH Cloud

Requête paramètrée en VBA

7 réponses
Avatar
Gilbert
Bonjour,

Je veux exécuter depuis VBA une requête enregistrée utilisant un paramètre.
Voici le texte de ma requête:
SELECT DISTINCTROW [Tbl Identité].Numidentite, [Tbl Identité].Nom, [Tbl
Identité].Prénom, [Tbl Identité].DateNaissance, [Tbl Identité].Adresse
FROM [Tbl Identité]
WHERE ((([Tbl Identité].Numidentite)=[forms]![frm fiche
d'accueil]![numidentite]))
ORDER BY [Tbl Identité].Nom, [Tbl Identité].Prénom;

et le code utilisé:
Set Db = CurrentDb
NomRqte = PrefixeRqte & Me.ListeDocuments.Column(3)
Set rst = Db.QueryDefs(NomRqte).OpenRecordset

J'obtiens le message suivant:
Erreur 3061 Trop peu de paramètres,1 attendu

J'ai ajouté la ligne suivante à ma requête (d'après ce que j'ai lu sur les
archives du newsgroup):
PARAMETERS [forms]![frm fiche d'accueil]![numidentite] Long;

Je précise que le formulaire est bien ouvert lorsque le code s'exécute.
Et bien sûr, si j'exécute la requête depuis la fenêtre base de données, elle
fonctionne correctement.

Et je ne peux pas recréer la requête en VBA, car l'utilisateur de la base la
sélectionne dans une liste de requêtes qui n'est pas fixe.

Merci d'avance

Gilbert

7 réponses

Avatar
Charles ERNST
Vérifiez déjà si la requète marche en mode direct. A mon sens il y a une
erreur quelque part


"Gilbert" a écrit dans le message de news:
%
Bonjour,

Je veux exécuter depuis VBA une requête enregistrée utilisant un
paramètre.
Voici le texte de ma requête:
SELECT DISTINCTROW [Tbl Identité].Numidentite, [Tbl Identité].Nom, [Tbl
Identité].Prénom, [Tbl Identité].DateNaissance, [Tbl Identité].Adresse
FROM [Tbl Identité]
WHERE ((([Tbl Identité].Numidentite)=[forms]![frm fiche
d'accueil]![numidentite]))
ORDER BY [Tbl Identité].Nom, [Tbl Identité].Prénom;

et le code utilisé:
Set Db = CurrentDb
NomRqte = PrefixeRqte & Me.ListeDocuments.Column(3)
Set rst = Db.QueryDefs(NomRqte).OpenRecordset

J'obtiens le message suivant:
Erreur 3061 Trop peu de paramètres,1 attendu

J'ai ajouté la ligne suivante à ma requête (d'après ce que j'ai lu sur les
archives du newsgroup):
PARAMETERS [forms]![frm fiche d'accueil]![numidentite] Long;

Je précise que le formulaire est bien ouvert lorsque le code s'exécute.
Et bien sûr, si j'exécute la requête depuis la fenêtre base de données,
elle
fonctionne correctement.

Et je ne peux pas recréer la requête en VBA, car l'utilisateur de la base
la
sélectionne dans une liste de requêtes qui n'est pas fixe.

Merci d'avance

Gilbert




Avatar
Gilbert
Merci de votre réponse.

Oui, ma requête fonctionne en mode direct.
Ellle fonctionne aussi depuis mon code si j'enlève la clause WHERE.

Pour l'instant j'ai contourné le problème en utilisant la fonction
ci-dessous et en remplaçant
WHERE ((([Tbl Identité].Numidentite)=[forms]![frm fiche
d'accueil]![numidentite]))
par
WHERE (([Tbl Identité].Numidentite)=ValeurControle("[forms]![frm fiche
d'accueil]![numidentite]"))

mais je trouve ça un peu lourd.



Public Function ValeurControle(FormControl As String) As Variant
Dim NomForm As String
Dim NomControle As String

If Left(FormControl, 9) = "[Forms]![" Then
NomForm = Mid(FormControl, 10, InStr(10, FormControl, "]") - 10)
NomControle = Mid(FormControl, InStr(10, FormControl, "[") + 1,
Len(FormControl) - 1 - InStr(10, FormControl, "["))

If CurrentProject.AllForms(NomForm).IsLoaded Then
ValeurControle = Forms(NomForm).Controls(NomControle)
End If
End If
End Function


--
Gilbert


"Charles ERNST" a écrit dans le message de news:

Vérifiez déjà si la requète marche en mode direct. A mon sens il y a une
erreur quelque part


"Gilbert" a écrit dans le message de news:
%
Bonjour,

Je veux exécuter depuis VBA une requête enregistrée utilisant un
paramètre.
Voici le texte de ma requête:
SELECT DISTINCTROW [Tbl Identité].Numidentite, [Tbl Identité].Nom,
[Tbl
Identité].Prénom, [Tbl Identité].DateNaissance, [Tbl Identité].Adresse
FROM [Tbl Identité]
WHERE ((([Tbl Identité].Numidentite)=[forms]![frm fiche
d'accueil]![numidentite]))
ORDER BY [Tbl Identité].Nom, [Tbl Identité].Prénom;

et le code utilisé:
Set Db = CurrentDb
NomRqte = PrefixeRqte & Me.ListeDocuments.Column(3)
Set rst = Db.QueryDefs(NomRqte).OpenRecordset

J'obtiens le message suivant:
Erreur 3061 Trop peu de paramètres,1 attendu

J'ai ajouté la ligne suivante à ma requête (d'après ce que j'ai lu sur
les
archives du newsgroup):
PARAMETERS [forms]![frm fiche d'accueil]![numidentite] Long;

Je précise que le formulaire est bien ouvert lorsque le code s'exécute.
Et bien sûr, si j'exécute la requête depuis la fenêtre base de données,
elle
fonctionne correctement.

Et je ne peux pas recréer la requête en VBA, car l'utilisateur de la base
la
sélectionne dans une liste de requêtes qui n'est pas fixe.

Merci d'avance

Gilbert








Avatar
3stone
Salut,


Si cette "construction" fonctionne, c'est que tu ne sort certainement pas
le forms!... de la chaine.


"... WHERE ((([Tbl Identité].Numidentite)=" & [forms]![frm fiche d'accueil]![numidentite]



--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/




"Gilbert"
| Pour l'instant j'ai contourné le problème en utilisant la fonction
| ci-dessous et en remplaçant
| WHERE ((([Tbl Identité].Numidentite)=[forms]![frm fiche
| d'accueil]![numidentite]))
| par
| WHERE (([Tbl Identité].Numidentite)=ValeurControle("[forms]![frm fiche
| d'accueil]![numidentite]"))
|
| mais je trouve ça un peu lourd.
|
|
|
| Public Function ValeurControle(FormControl As String) As Variant
| Dim NomForm As String
| Dim NomControle As String
|
| If Left(FormControl, 9) = "[Forms]![" Then
| NomForm = Mid(FormControl, 10, InStr(10, FormControl, "]") - 10)
| NomControle = Mid(FormControl, InStr(10, FormControl, "[") + 1,
| Len(FormControl) - 1 - InStr(10, FormControl, "["))
|
| If CurrentProject.AllForms(NomForm).IsLoaded Then
| ValeurControle = Forms(NomForm).Controls(NomControle)
| End If
| End If
| End Function
Avatar
Gilbert
Bonjour,

Ma requête n'est pas créée dans le code, c'est une requête enregistrée.

--
Gilbert


"3stone" a écrit dans le message de news:

Salut,


Si cette "construction" fonctionne, c'est que tu ne sort certainement pas
le forms!... de la chaine.


"... WHERE ((([Tbl Identité].Numidentite)=" & [forms]![frm fiche
d'accueil]![numidentite]



--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/




"Gilbert"
| Pour l'instant j'ai contourné le problème en utilisant la fonction
| ci-dessous et en remplaçant
| WHERE ((([Tbl Identité].Numidentite)=[forms]![frm fiche
| d'accueil]![numidentite]))
| par
| WHERE (([Tbl Identité].Numidentite)=ValeurControle("[forms]![frm fiche
| d'accueil]![numidentite]"))
|
| mais je trouve ça un peu lourd.
|
|
|
| Public Function ValeurControle(FormControl As String) As Variant
| Dim NomForm As String
| Dim NomControle As String
|
| If Left(FormControl, 9) = "[Forms]![" Then
| NomForm = Mid(FormControl, 10, InStr(10, FormControl, "]") - 10)
| NomControle = Mid(FormControl, InStr(10, FormControl, "[") + 1,
| Len(FormControl) - 1 - InStr(10, FormControl, "["))
|
| If CurrentProject.AllForms(NomForm).IsLoaded Then
| ValeurControle = Forms(NomForm).Controls(NomControle)
| End If
| End If
| End Function



Avatar
3stone
re,

"Gilbert"
|
| Ma requête n'est pas créée dans le code, c'est une requête enregistrée.


et pouquoi uttiliser des fantaisies comme

[forms]![frm fiche d'accueil]![numidentite]


Forms!frmFicheAccueil!NumIdentite

est tout aussi lisible et évite ces problèmes de caractètes folkloriques


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Gilbert
Je suis bien d'accord avec toi, c'était à mes débuts avec Access et je lui
parlais en français avec des accents et tout.
Mais je ne pense pas que ça influe sur l'exécution de ma requête

--
Gilbert


"3stone" a écrit dans le message de news:

re,

"Gilbert"
|
| Ma requête n'est pas créée dans le code, c'est une requête enregistrée.


et pouquoi uttiliser des fantaisies comme

[forms]![frm fiche d'accueil]![numidentite]


Forms!frmFicheAccueil!NumIdentite

est tout aussi lisible et évite ces problèmes de caractètes folkloriques


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/



Avatar
3stone
"Gilbert"
| Je suis bien d'accord avec toi, c'était à mes débuts avec Access et je lui
| parlais en français avec des accents et tout.
| Mais je ne pense pas que ça influe sur l'exécution de ma requête


Grossière erreur...

Garde ton bon francais pour les libellés et autres jolies étiquettes...
Pour le reste, ce n'est qu'embrouille et misère ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/