query parametre multicritere [access] - SQL/NoSQL - Programmation
Marsh Posté le 17-07-2002 à 00:18:35
Essayes avec In("012", "015", "016" )
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
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) ?
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"
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
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 + " );";
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.
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 !
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
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
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
Message édité par ricoco le 16-07-2002 à 23:44:28