OVH Cloud OVH Cloud

critère de requête

3 réponses
Avatar
ben
Bonjour,
J'ai un formulaire 1 bas=E9 sur une requ=EAte 1.
Ce formulaire 1 peux =EAtre ouvert par l'interm=E9diaire de 3=20
autres formulaires : A B et C.
Le probl=E8me est que le crit=E8re de la requ=EAte 1 est :
- un contr=F4le A du formulaire A si formulaire 1 a =E9t=E9=20
ouvert par le formulaire A
- un contr=F4le B du formulaire B si formulaire 1 a =E9t=E9=20
ouvert par le formulaire B
- un contr=F4le C du formulaire C si formulaire 1 a =E9t=E9=20
ouvert par le formulaire C
Je n'arrive pas =E0 =E9crire cela dans ma requ=EAte.
J'ai essay=E9 : crit=E8re =3D [Formulaires]![A]![contr=F4leA] OU=20
[Formulaires]![B]![contr=F4leB] OU [Formulaires]![C]!
[contr=F4leC], mais access recherche les 3 formulaires,=20
j'ai essay=E9 d'affecter la valeur de contr=F4leA, contr=F4leB=20
et contr=F4leC dans une variable, mais je n'arrive pas =E0=20
mettre cette variable en crit=E8re de requ=EAte.
Merci d'avance de votre aide.

3 réponses

Avatar
Thierry Bertrand
Su les formulatires A B ou C ne peuvent pas être ouverts simultanéments, tu
peux savoir lequel l'est en balayant la liste Forms du style


dim frm as form
dim Ok as boolean

Okúlse
for each frm in application.forms
select case frm.name
case "A": msgbox "c'est le A": Ok=True:exit for
case "B":msgbox "C'est le B": Ok=True:exit for
case "C":msgbox "C'est le C":Ok=true:exit for
case else:
end select
next
if not OK then
msgbox "J'ai pas trouvé ... serait-ce un bug ???"
end if



"ben" a écrit dans le message de news:
0f9601c4f6f0$69301800$
Bonjour,
J'ai un formulaire 1 basé sur une requête 1.
Ce formulaire 1 peux être ouvert par l'intermédiaire de 3
autres formulaires : A B et C.
Le problème est que le critère de la requête 1 est :
- un contrôle A du formulaire A si formulaire 1 a été
ouvert par le formulaire A
- un contrôle B du formulaire B si formulaire 1 a été
ouvert par le formulaire B
- un contrôle C du formulaire C si formulaire 1 a été
ouvert par le formulaire C
Je n'arrive pas à écrire cela dans ma requête.
J'ai essayé : critère = [Formulaires]![A]![contrôleA] OU
[Formulaires]![B]![contrôleB] OU [Formulaires]![C]!
[contrôleC], mais access recherche les 3 formulaires,
j'ai essayé d'affecter la valeur de contrôleA, contrôleB
et contrôleC dans une variable, mais je n'arrive pas à
mettre cette variable en critère de requête.
Merci d'avance de votre aide.
Avatar
Eric
Bonjour Ben,

Une méthode, certainement à améliorer.

Dans ta requête (req1), sur le champ pour lequel il y a un critère,
mettre n'importe quoi comme critere (dans l'exemple "Koi" - je suppose
que le champ est alphanumérique). Sauver la requête.

La procédure suivante modifie le sql de la requête pour s'adapter au
formulaire appelant le formulaire1.

Sur le bouton de chacun des formulaires FormA, FormB, Formc, le code
suivant, sans oublier de changer le nom du controle :

(Charger la Référence Microsoft DAO Object Library 3.x)

Private Sub Commande3_Click()
Dim qry As DAO.querydef, strSQL As String
Dim strSQLOld As String
Dim nomf As String, nomctl As String
Set qry = CurrentDb.QueryDefs("req1")
strSQL = qry.SQL
'on stocke le sql de départ pour le réaffecter à la fin
strSQLOld = strSQL
nomf = Me.Name: nomctl = "A" ' <--- à adapter B puis C
'on modifie le critère en utilisant le nom du formulaire et celui du
controle
strSQL = Replace(strSQL, "koi", "Formulaires![" & nomf & "]![" &
nomctl & "]")
'on supprime les " de la chaine SQL
strSQL = Replace(strSQL, """", "")
qry.SQL = strSQL

On Error GoTo Err_Commande3_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Formulaire1" <-- A Adapter
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Commande3_Click:
'réaffectation du sql d'origine
CurrentDb.QueryDefs("REQ1").SQL = strSQLOld
Exit Sub

Err_Commande3_Click:
MsgBox Err.Description
Resume Exit_Commande3_Click

End Sub


--
A+
Eric
Lien à suivre : http://users.skynet.be/mpfa/


"ben" écrivait news:0f9601c4f6f0
$69301800$:

Bonjour,
J'ai un formulaire 1 basé sur une requête 1.
Ce formulaire 1 peux être ouvert par l'intermédiaire de 3
autres formulaires : A B et C.
Le problème est que le critère de la requête 1 est :
- un contrôle A du formulaire A si formulaire 1 a été
ouvert par le formulaire A
- un contrôle B du formulaire B si formulaire 1 a été
ouvert par le formulaire B
- un contrôle C du formulaire C si formulaire 1 a été
ouvert par le formulaire C
Je n'arrive pas à écrire cela dans ma requête.
J'ai essayé : critère = [Formulaires]![A]![contrôleA] OU
[Formulaires]![B]![contrôleB] OU [Formulaires]![C]!
[contrôleC], mais access recherche les 3 formulaires,
j'ai essayé d'affecter la valeur de contrôleA, contrôleB
et contrôleC dans une variable, mais je n'arrive pas à
mettre cette variable en critère de requête.
Merci d'avance de votre aide.




Avatar
ben
C'est exactement ce qu'il me fallait, merci.
Ben
-----Message d'origine-----
Su les formulatires A B ou C ne peuvent pas être ouverts
simultanéments, tu

peux savoir lequel l'est en balayant la liste Forms du
style



dim frm as form
dim Ok as boolean

Okúlse
for each frm in application.forms
select case frm.name
case "A": msgbox "c'est le A": Ok=True:exit for
case "B":msgbox "C'est le B": Ok=True:exit for
case "C":msgbox "C'est le C":Ok=true:exit for
case else:
end select
next
if not OK then
msgbox "J'ai pas trouvé ... serait-ce un bug ???"
end if



"ben" a écrit dans
le message de news:

0f9601c4f6f0$69301800$
Bonjour,
J'ai un formulaire 1 basé sur une requête 1.
Ce formulaire 1 peux être ouvert par l'intermédiaire de 3
autres formulaires : A B et C.
Le problème est que le critère de la requête 1 est :
- un contrôle A du formulaire A si formulaire 1 a été
ouvert par le formulaire A
- un contrôle B du formulaire B si formulaire 1 a été
ouvert par le formulaire B
- un contrôle C du formulaire C si formulaire 1 a été
ouvert par le formulaire C
Je n'arrive pas à écrire cela dans ma requête.
J'ai essayé : critère = [Formulaires]![A]![contrôleA] OU
[Formulaires]![B]![contrôleB] OU [Formulaires]![C]!
[contrôleC], mais access recherche les 3 formulaires,
j'ai essayé d'affecter la valeur de contrôleA, contrôleB
et contrôleC dans une variable, mais je n'arrive pas à
mettre cette variable en critère de requête.
Merci d'avance de votre aide.


.