OVH Cloud OVH Cloud

Rajouter "where" à une requête existante !

13 réponses
Avatar
Bruno MAZÉPA
Bonjour à tous,

J'ai un formulaire dont le RecordSource est : "Rqt SaisieDepMod"

Sous Access 2000, peut-on rajouter une condition "where"
à ma requête "Rqt SaisieDepMod" déjà existante, par VBA !?

--
Cordialement.

10 réponses

1 2
Avatar
Alain TEYSSEDRE
Bonjour Bruno

Pour modifier le RecordSource de ton formulaire tu peux écrire ta requete
dans une variable String
puis ajouter ta clause Where au texte:

Dim strSql as String
strSql = "SELECT .... FROM .....WHERE ...." (Ne pas oublier me terminer par
le ; et supprimer le ;
Me.RecordSource = strSql


@+

Alain


"Bruno MAZÉPA" <ReplyToNewsGroup> a écrit dans le message de
news:%
Bonjour à tous,

J'ai un formulaire dont le RecordSource est : "Rqt SaisieDepMod"

Sous Access 2000, peut-on rajouter une condition "where"
à ma requête "Rqt SaisieDepMod" déjà existante, par VBA !?

--
Cordialement.




Avatar
3stone
Salut,

"Bruno MAZÉPA"
J'ai un formulaire dont le RecordSource est : "Rqt SaisieDepMod"

Sous Access 2000, peut-on rajouter une condition "where"
à ma requête "Rqt SaisieDepMod" déjà existante, par VBA !?



T peux déjà récuperer la chaîne SQL ainsi...


Dim strSQL As String
strSQL = CurrentDb.QueryDefs("Rqt SaisieDepMod").SQL

Si cette requête ne possède pas de condition where, il suffit de l'ajouter
par concaténation...

strSQL = strSQL & " Where Prenom = 'toto';"
CurrentDb.Execute strSQL

Si la requête possède déjà une clause where, soit la complèter, soit la remplacer.
Cela devient un simple travail sur une chaîne...

Cela répond à ta question ?


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
Alain TEYSSEDRE
Bonjour Pierre

Ne faut il pas supprimer le ; avant de faire la concaténation ?

@+
Alain


"3stone" a écrit dans le message de
news:3fc37625$0$3240$
Salut,

"Bruno MAZÉPA"
J'ai un formulaire dont le RecordSource est : "Rqt SaisieDepMod"

Sous Access 2000, peut-on rajouter une condition "where"
à ma requête "Rqt SaisieDepMod" déjà existante, par VBA !?



T peux déjà récuperer la chaîne SQL ainsi...


Dim strSQL As String
strSQL = CurrentDb.QueryDefs("Rqt SaisieDepMod").SQL

Si cette requête ne possède pas de condition where, il suffit de l'ajouter
par concaténation...

strSQL = strSQL & " Where Prenom = 'toto';"
CurrentDb.Execute strSQL

Si la requête possède déjà une clause where, soit la complèter, soit la
remplacer.

Cela devient un simple travail sur une chaîne...

Cela répond à ta question ?


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------







Avatar
Xavier HUE
Salut Pierre,

Cela devient un simple travail sur une chaîne...
T'es sûr que c'est aussi simple? ;-)


J'ai travaillé la dessus voilà quelque temps pour
remplacer une clause Where dans n'importe quelle chaine
SQL, enfin quand je dis n'importe... ;-) Disons une chaine
SQL classique SELECT... FROM ... [WHERE] [ORDER BY]... etc.

Pour l'instant je ne sais remplacer que le WHERE. :-(

Je me suis remis au au boulot ce jour afin de traiter les
mots clés WHERE, GROUP BY, HAVING et ORDER BY.

Pas aussi simple qu'il n'y paraît.

Si tu as une boîte noire dans tes gamelles et tes bidons
qui fait le travail, je suis preneur.

Et si Bruno, toi ou autre êtes intêressés par mon travail
sur la Clause WHERE, dites le moi... Je maile, ou je poste
dans le forum... as you like.

Cordialement.

Avatar
3stone
Salut Alain,

"Alain TEYSSEDRE"

Ne faut il pas supprimer le ; avant de faire la concaténation ?


Bien sur....


Mais, comme dirait Pierre CFI, c'était pour voir si tu suivais...

;-)))



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
Alain TEYSSEDRE
C'est curieux que tu n'es pas répondu à mon casse tête chinois intitulé
"Parcourir l'arborescence d'une table"

je pensais que tu aurais suivi ..

Alain


"3stone" a écrit dans le message de
news:3fc38a5a$0$27390$
Bien sur....



Mais, comme dirait Pierre CFI, c'était pour voir si tu suivais...



Avatar
3stone
Salut,

"Xavier HUE"
Cela devient un simple travail sur une chaîne...
T'es sûr que c'est aussi simple? ;-)



Je dis simple... à condition que l'on connaisse au moins les Instr, Left, Right et autres Mid...
;-)

Et comme une chaîne SQL à toujours un ordre défini...
Il est assez simple de vérifier l'existance d'un "Order By" et autre...
- de récupérer cela *par la droite* et de le retrancher de la chaîne
et, à la fin, de "recomposer" les morceaux, avec éventuellement un nouveau "bout"

Bien sûr, s'il s'agit de recréer ainsi une chaîne très complexe, autant la créer de toute pièce.


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
Bruno MAZÉPA
Bonjour à tous, et merci de votre aide.
Donc effectivement je récupère ma définition sql avec :
strSQL = CurrentDb.QueryDefs("Rqt SaisieDepMod").SQL
Je manipule ensuite la chaine de caractère pour intégrer mon "WHERE"
Puis je remplace mon recordsource, par la nouvelle valeur.
Ca marche, mais.... oui je sais il faut qu'il y ai tjs un mais ;-))
Quand je veux refaire la manipulation (changement de mon critère de choix)
Je fais donc :
strSQL = Me![SFrm SaisieDepMod].Form.RecordSource
Puisqu'il ne s'agit plus de la référence à une requète.
Et là j'ai un gros soucis, il ne me prend que les 256 premiers caractères !?
Que ce passe t'il !?
--
Cordialement.

"Bruno MAZÉPA" <ReplyToNewsGroup> a écrit dans le message de
news:%
Bonjour à tous,

J'ai un formulaire dont le RecordSource est : "Rqt SaisieDepMod"

Sous Access 2000, peut-on rajouter une condition "where"
à ma requête "Rqt SaisieDepMod" déjà existante, par VBA !?

--
Cordialement.




Avatar
3stone
Salut,

"Bruno MAZÉPA"
Je fais donc :
strSQL = Me![SFrm SaisieDepMod].Form.RecordSource


Tu ne pense pas inverser ton expression ?


Puisqu'il ne s'agit plus de la référence à une requète.
Et là j'ai un gros soucis, il ne me prend que les 256 premiers caractères !?



Je pencherai pour une erreur de concaténation...
puisque strSQL est un simple... string !



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
Bruno MAZÉPA
Salut Pierre,
Dans ma procédure j'ai le code suivant :
Dim MyQuery, strSQL, strSQLtmp, PosWhere, PosOrder, PosFinal
Set xdb = CurrentDb
'
MyQuery = Me![SFrm SaisieDepMod].Form.RecordSource
' Si nom de requete remplacé par sa définition
If Left(MyQuery, 3) = "Rqt" Then
strSQL = xdb.QueryDefs(MyQuery).SQL
Else
strSQL = MyQuery
End If

Ensuite j'ai un tas de test et de manipulation de chaine pour placer mon
"WHERE ..."
A la fin de ma procédure j'ai donc :
'Affecter la nouvelle source au formulaire
Me![SFrm SaisieDepMod].Form.RecordSource = strSQL
Me![SFrm SaisieDepMod].Requery
Set xdb = Nothing

Tout ça fonctionne bien la première fois,
lorsque je reviens sur la procédure suite à un changement de condition
"WHERE"
Mon code au début : MyQuery = Me![SFrm SaisieDepMod].Form.RecordSource
ne me retourne que les 256 premiers caractères !?
Je ne comprends pas !
--
Cordialement.

"3stone" a écrit dans le message de
news:3fc493bc$0$3247$
Salut,

"Bruno MAZÉPA"
Je fais donc :
strSQL = Me![SFrm SaisieDepMod].Form.RecordSource


Tu ne pense pas inverser ton expression ?


Puisqu'il ne s'agit plus de la référence à une requète.
Et là j'ai un gros soucis, il ne me prend que les 256 premiers
caractères !?




Je pencherai pour une erreur de concaténation...
puisque strSQL est un simple... string !



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------







1 2