[access] query parametre multicritere

query parametre multicritere [access] - SQL/NoSQL - Programmation

Marsh Posté le 16-07-2002 à 23:35:41    

Hello !
dans les requetes access, on peut récupéré un valeur saisie dans une boite de dialogue ou dans un champ texte d'un formulaire
 
autrement dit la chaine de caractère sert de critere
 
est-il possible de faire passer une chaine de caractère qui contient des critères du genre
"012" ou "015" ou "016"
 
j'arrive seulement à faire passer un critère à la fois
:jap:


Message édité par ricoco le 16-07-2002 à 23:44:28
Reply

Marsh Posté le 16-07-2002 à 23:35:41   

Reply

Marsh Posté le 17-07-2002 à 00:18:35    

Essayes avec In("012", "015", "016" )


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 17-07-2002 à 00:45:55    

Mara's dad a écrit a écrit :

Essayes avec In("012", "015", "016" )
 




mon problème est pour quand le critère vient de l'extérieur (formulaire) donc les critères sont un paramètre ou une variable si tu préfères
 
les critères directement dans la requête elle meme je n'ai pas de pb  
 
par ex une zone de texte nommée "varpar" dans un formulaire [form1] dans la zone de texte, je saisie :
In("012", "015", "016" )  
 
 
dans une requête, je mets comme critère :
[forms]![form1]![varpar]
ca marche seulement si varpar ne contient qu'un chiffre c'est à dire un seul critère
 

Reply

Marsh Posté le 17-07-2002 à 01:56:10    

je connait très bien visual basic et SQL mais là je comprend pas trop le problème.
 
c'est quoi ta requête finale (fais un msgbox pour voir) ?

Reply

Marsh Posté le 17-07-2002 à 08:00:17    

eck a écrit a écrit :

je connait très bien visual basic et SQL mais là je comprend pas trop le problème.
 
c'est quoi ta requête finale (fais un msgbox pour voir) ?




c'est pour une simple requête sélection
sauf que pour un champ les critères viennent de l'extérieur
 
pour un seul critère par exemple "012", pas de pb ça donne :
IF table.champ = formulaire.critere
ca marche bien
 
par contre, si le critère contient aussi un oprérateur
'012' ou '015'
ca passe pas il faut que je puisse signaler à access que le "OU" n'est pas un critère mais un operateur
j'ai l'impression qu'il traite ma requête de la facon suivante
IF table.champ = "012 ou 015"
 
j'aimerais plutot qu'il l'interprete comm :
IF table.champ = "012" ou "015"
 
 
 

Reply

Marsh Posté le 17-07-2002 à 09:50:50    

ok ! je vois ton probleme.
 
Je pense qu'il va falloir que tu ajoute un peu de code pour contruire ta requete manuellement
 
replacer "012 ou 015"  par table.champ = "012" ou table.champ = "015"  
 
Faire une sorte d'analyse des criteres pour gerer tous les cas possible ( ET, OU, NOT, etc. ) et generer la requete en dynamique
 
 
Ca fait pas mal de temps que je n'ai pas fait de MS Access. Peut etre que dans la derniere version il est capable de faire ca tout seul mais j'en doute  :heink:

Reply

Marsh Posté le 17-07-2002 à 09:58:19    

D'après ce que j'ai essayé, il me semble aussi que la seule solution soit de construire la requête à la main.
 
Si dans ton critere tu saisis:
'012', '015', '016'
 
tu devrais pouvoir générer une requête du genre :
 
"select * from MaTable where MonChamp in( " + critere + " );";


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 17-07-2002 à 14:49:11    

merci mais je n'arrive pas à lui faire avaler ça
Mara's dad, je pense que la méthode que tu cites est valide en VBA car avec le générateur de requête quelque soit la méthode que je choisis je suis seulement parvenu à obtenir qq dans le cas ou il y a un seul critère passé sous forme de paramètre ex : '012'
 
sinon si on utilise du VBA genre docmd.runsql "..." est-ce qu'il est possible d'utiliser le résultat dans une autre requête ?
 
l'objecti étant d'utiliser le résultat uniquement dans un état.
 
:jap:

Reply

Marsh Posté le 17-07-2002 à 15:14:26    

Je ne comprends pas "est-ce qu'il est possible d'utiliser le résultat dans une autre requête ?"
 
Tu as 2 requêtes SQL ? ? ?
 
Sinon, pour l'état, tu peux modifier la requête sur laquelle il est basé en VBA !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 17-07-2002 à 15:21:28    

Exemple pour un report :
 
Private Sub Report_Open(Cancel As Integer)
 
critere = "'015', '016'"
Me.RecordSource = "select * from MaTable where MonChamp in( " + critere + " );"
 
End Sub


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 17-07-2002 à 15:21:28   

Reply

Marsh Posté le 17-07-2002 à 21:25:17    

Mara's dad a écrit a écrit :

Exemple pour un report :
 
Private Sub Report_Open(Cancel As Integer)
 
critere = "'015', '016'"
Me.RecordSource = "select * from MaTable where MonChamp in( " + critere + " );"
 
End Sub




je n'ai pas encore testé mais merci je ne connaissais pas
en fait c'est pour une refonte des états existant suite une modif dans la base de données !
pratiquement 90 % des requêtes sont utilisees pour des états
et certains états utilisent plusieurs requêtes
 
:jap:


Message édité par ricoco le 17-07-2002 à 21:25:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed