OVH Cloud OVH Cloud

Erreur 3085 Fonction DateDébut non définie dans l'expression

9 réponses
Avatar
Philippe
Bonjour,

Dans une requête j'ai un critère de sélection : Entre DateDébut() Et
DateFin()

Function DateDébut()
Dim FC As Form
Set FC = Forms![Menu]
DateDébut = FC.DateDébut
End Function

Lorsque j'exécute ma requête pas de problème.

Lorsque j'exécute ma requête via une fonction, j'ai le message d'erreur en
objet

Set Ds = BD.OpenRecordset("Export_Manuel_Courriers_Départ_Service")

Ce que je ne comprend pas c'est que cela a fonctionné tout l'après-midi et
cela ne fonctionne plus depuis que j'ai fermé et compacté la base ??

Merci de votre aide

Ps : j'utilise Access 97

Philippe

9 réponses

Avatar
3stone
Salut,

"Philippe"
| Dans une requête j'ai un critère de sélection : Entre DateDébut() Et
| DateFin()
|
| Function DateDébut()
| Dim FC As Form
| Set FC = Forms![Menu]
| DateDébut = FC.DateDébut
| End Function
|
| Lorsque j'exécute ma requête pas de problème.
|
| Lorsque j'exécute ma requête via une fonction, j'ai le message d'erreur en
| objet
|
| Set Ds = BD.OpenRecordset("Export_Manuel_Courriers_Départ_Service")
|
| Ce que je ne comprend pas c'est que cela a fonctionné tout l'après-midi et
| cela ne fonctionne plus depuis que j'ai fermé et compacté la base ??


Moi, ce que je ne comprend pas, c'est le pourquoi de ces contorsions !
Ni le rapport entre ta fonction et ton recordset...

Pourquoi ne mets tu pas simplement comme critère dans ta requête :

Forms!Menu!DateDébut

Non ?


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

et merci de prendre un peu de ton temps pour te pencher sur mon problème

Je passe par les fonctions DateDébut() et DateFin() car si j'utilise
Forms!Menu!DateDébut :

Cela fonctionne quand j'exécute la requête

Mais lorsque j'exécute ma requête via ma fonction, j'ai l'erreur d'exécution
3061 Trop peu de paramètres. 2 attendu

Si tu as une idée pour contourner le problème

Merci d'avance

Philippe



Salut,

"Philippe"
| Dans une requête j'ai un critère de sélection : Entre DateDébut() Et
| DateFin()
|
| Function DateDébut()
| Dim FC As Form
| Set FC = Forms![Menu]
| DateDébut = FC.DateDébut
| End Function
|
| Lorsque j'exécute ma requête pas de problème.
|
| Lorsque j'exécute ma requête via une fonction, j'ai le message d'erreur en
| objet
|
| Set Ds = BD.OpenRecordset("Export_Manuel_Courriers_Départ_Service")
|
| Ce que je ne comprend pas c'est que cela a fonctionné tout l'après-midi et
| cela ne fonctionne plus depuis que j'ai fermé et compacté la base ??


Moi, ce que je ne comprend pas, c'est le pourquoi de ces contorsions !
Ni le rapport entre ta fonction et ton recordset...

Pourquoi ne mets tu pas simplement comme critère dans ta requête :

Forms!Menu!DateDébut

Non ?


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




Avatar
3stone
Salut,

"Philippe"
| Je passe par les fonctions DateDébut() et DateFin() car si j'utilise
| Forms!Menu!DateDébut :
|
| Cela fonctionne quand j'exécute la requête
|
| Mais lorsque j'exécute ma requête via ma fonction, j'ai l'erreur d'exécution
| 3061 Trop peu de paramètres. 2 attendu


Cela viendrait plutôt d'une erreur de ta "phrase" SQL
Donne s'en l'énoncé ici.


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

Voici la phrase SQL, mais je passe par le mode création de requête

SELECT Courriers.Compteur, Courriers.Type_courrier,
Courriers.Année_courrier, Courriers.Chrono, Courriers.Numéro,
Courriers.Date_Enregistrement, Courriers.Date_Courrier,
Courriers.Correspondant, Courriers.Adresse, Courriers.CodePostal,
Courriers.Ville
FROM Courriers
WHERE (((Courriers.Type_courrier)="D") AND ((Courriers.Date_Enregistrement)
Between [Forms]![Menu]![DateDébut] And [Forms]![Menu]![DateFin]))
ORDER BY Courriers.Compteur;

Encore Merci,

Philippe


Salut,

"Philippe"
| Je passe par les fonctions DateDébut() et DateFin() car si j'utilise
| Forms!Menu!DateDébut :
|
| Cela fonctionne quand j'exécute la requête
|
| Mais lorsque j'exécute ma requête via ma fonction, j'ai l'erreur d'exécution
| 3061 Trop peu de paramètres. 2 attendu


Cela viendrait plutôt d'une erreur de ta "phrase" SQL
Donne s'en l'énoncé ici.


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




Avatar
3stone
Salut,

"Philippe"
| Voici la phrase SQL, mais je passe par le mode création de requête
|
| SELECT Courriers.Compteur, Courriers.Type_courrier,
| Courriers.Année_courrier, Courriers.Chrono, Courriers.Numéro,
| Courriers.Date_Enregistrement, Courriers.Date_Courrier,
| Courriers.Correspondant, Courriers.Adresse, Courriers.CodePostal,
| Courriers.Ville
| FROM Courriers
| WHERE (((Courriers.Type_courrier)="D") AND ((Courriers.Date_Enregistrement)
| Between [Forms]![Menu]![DateDébut] And [Forms]![Menu]![DateFin]))
| ORDER BY Courriers.Compteur;


Avec ce que tu indique, [DateDébut] et [DateFin] devraient être des zones de texte
se trouvant sur un formulaire "Menu"...
Je ne vois pas le rapport avec l'objet du message !


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

1) Dans La phrase SQL d'origine (objet de mon 1er message d'erreur) :

Between [Forms]![Menu]![DateDébut] And [Forms]![Menu]![DateFin] est remplacé
par Between DateDébut() And DateFin()

2) Lorsque tu m'as demandé pourquoi je passe par des fonctions plutôt que
Between Forms..., je t'ai indiqué que je passe par les fonctions DateDébut()
et DateFin() car si j'utilise Forms!Menu!DateDébut :

Cela fonctionne quand j'exécute la requête

Mais lorsque j'exécute ma requête via ma fonction, j'ai l'erreur d'exécution
3061 Trop peu de paramètres. 2 attendu

3) Comme tu te demandais si ce n'était pas un problème dans ma phrase, je te
l'ai envoyée avec entre Forms....

Donc en résumé, car tu dois commencé à te perdre dans mes explications :

- Que j'utilise entre DateDébut()... ou entre Forms...., les requêtes
fonctionnent bien si je les lancent manuellement

- Quand j'exécute la requête dans une fonction :
Set Ds = BD.OpenRecordset("Export_Manuel_Courriers_Départ_Service")

Si j'utilise Between [Forms]![Menu]![DateDébut] And [Forms]![Menu]![DateFin]
---> j'ai l'erreur d'exécution 3061 Trop peu de paramètres. 2 attendu

Si j'utilise Between DateDébut() And DateFin()
---> j'ai l'erreur d'exécution 3085 Fonction DateDébut non définie dans
l'expression

Pourtant cela fonctionnait bien pendant les tests et j'utilise cette méthode
dans d'autres bases ??

Merci encore,

Philippe

Pour être le plus complet possible, ci après les 3 fonctions utilisées :

Option Compare Database
Option Explicit

Function DateDébut()
Dim FC As Form
Set FC = Forms![Menu]
DateDébut = FC.DateDébut
End Function

Function DateFin()
Dim FC As Form
Set FC = Forms![Menu]
DateFin = FC.DateFin
End Function

Function Maj_Courriers_Mairie()
Dim BD As Database
Dim BD1 As Database
Dim Ds As Recordset
Dim DsM As Recordset
Dim Cpt As Long
Set BD = OpenDatabase("C:CourrierImport_Manuel.Mdb")
Set Ds = BD.OpenRecordset("Export_Manuel_Courriers_Départ_Service")
Avatar
3stone
Salut,

"Philippe"
[...]
| Donc en résumé, car tu dois commencé à te perdre dans mes explications :


Oui ;-)


| - Que j'utilise entre DateDébut()... ou entre Forms...., les requêtes
| fonctionnent bien si je les lancent manuellement
|
| - Quand j'exécute la requête dans une fonction :
| Set Ds = BD.OpenRecordset("Export_Manuel_Courriers_Départ_Service")
|
| Si j'utilise Between [Forms]![Menu]![DateDébut] And [Forms]![Menu]![DateFin]
| ---> j'ai l'erreur d'exécution 3061 Trop peu de paramètres. 2 attendu
|
| Si j'utilise Between DateDébut() And DateFin()
| ---> j'ai l'erreur d'exécution 3085 Fonction DateDébut non définie dans
| l'expression


Déjà, il n'est pas prudent de nommer un fonction du même nom qu'une zone
de texte (ou d'autre chose d'ailleurs). Prendre l'habitude de préfixer les fonctions
de "fn" - fnDateDebut()

Si ta requête est une requête enregistrée et que tu indique
Forms!NomForm!DateDebut
cela doit fonctionner si le formulaire est ouvert et le chemin indiqué est correct.

Si ta requête est construite par le VBA comme par exemple:
strSQL = "Select ..." il faut évidement "sortir" de la chaîne les "Forms!NomFrm!DateDebut"

On passe par une fonction lorsque l'on a besoin de la valeur d'une variable,
en dehors de ce cas, c'est inutile lorsque l'on ne transmet rien à cette fonction.


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

Si je suis tes conseils et que je n'utilise plus mes fonctions datedébut()
et DateFin()

J'ai donc ma requête avec le critère Entre Forms![menu]![dateDébut] et
Forms![menu]![DateFIn]

Je lance ma fonction Maj_Courriers_Mairie() à partir de mon formulaire Menu
dans lequel j'ai 2 champs DateDébut et DateFin

Et là je retombe sur mon erreur d'exécution 3061 Trop peu de paramètres. 2
attendu

Si j'exécute ma requête sans la "lancer" par la fonction elle fonctionne

Si tu as une idée...

Merci encore

Philippe

Si ta requête est une requête enregistrée et que tu indique
Forms!NomForm!DateDebut
cela doit fonctionner si le formulaire est ouvert et le chemin indiqué est
correct.



Salut,

"Philippe"
[...]
| Donc en résumé, car tu dois commencé à te perdre dans mes explications :


Oui ;-)


| - Que j'utilise entre DateDébut()... ou entre Forms...., les requêtes
| fonctionnent bien si je les lancent manuellement
|
| - Quand j'exécute la requête dans une fonction :
| Set Ds = BD.OpenRecordset("Export_Manuel_Courriers_Départ_Service")
|
| Si j'utilise Between [Forms]![Menu]![DateDébut] And [Forms]![Menu]![DateFin]
| ---> j'ai l'erreur d'exécution 3061 Trop peu de paramètres. 2 attendu
|
| Si j'utilise Between DateDébut() And DateFin()
| ---> j'ai l'erreur d'exécution 3085 Fonction DateDébut non définie dans
| l'expression


Déjà, il n'est pas prudent de nommer un fonction du même nom qu'une zone
de texte (ou d'autre chose d'ailleurs). Prendre l'habitude de préfixer les fonctions
de "fn" - fnDateDebut()

Si ta requête est une requête enregistrée et que tu indique
Forms!NomForm!DateDebut
cela doit fonctionner si le formulaire est ouvert et le chemin indiqué est correct.

Si ta requête est construite par le VBA comme par exemple:
strSQL = "Select ..." il faut évidement "sortir" de la chaîne les "Forms!NomFrm!DateDebut"

On passe par une fonction lorsque l'on a besoin de la valeur d'une variable,
en dehors de ce cas, c'est inutile lorsque l'on ne transmet rien à cette fonction.


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




Avatar
3stone
re,

"Philippe"
[...]
| Je lance ma fonction Maj_Courriers_Mairie() à partir de mon formulaire Menu
| dans lequel j'ai 2 champs DateDébut et DateFin
|
| Et là je retombe sur mon erreur d'exécution 3061 Trop peu de paramètres. 2
| attendu


Tu dois renseigner les paramètres avant l'appel.
http://www.mvps.org/accessfr/queries/qry0013.htm

Regarde aussi dans l'aide "Parameters"


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