Requête SQL multi critères au choix

itmli Messages postés 2 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 24 octobre 2008 - 24 oct. 2008 à 12:07
itmli Messages postés 2 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 24 octobre 2008 - 24 oct. 2008 à 16:30
Bonjour ,
tout dabord je dois dire que je suis débutant et autodidact et je souhaiterais avoir un peu d'aide pour ce qui suit :

j'ai énormement de données réparties dans 4 DB Access 2003 (une par trimestre d'à peu prés 1Go chacune) avec deux tables de données par DB ; plus une DB dans laquelle je lie les 8 tables des 4 DB précedentes et ou je fais mes formulaires requêtes états et macros . Mon but est d'incrémenter une Table temporaire via un formulaire à choix multiple .

Structure de DB1 (pour DB2 , 3 et 4 la structure est identique ex : DB2 / T1_DB2 / T2_DB2 etc) :

1 Table T1_DB1 de 20 champs C1 à C20
1 Table T2_DB1 de 20 champs C1 à C25

Structure du formulaire dans DB_Uti :

1 groupe A de 4 options pour le choix de la DB1 ou DB2 ou DB3 ou DB4 
1 groupe  B de 2 options pour le choix des tables T_1 ou T_2 
Ex : Si le choix est A1 et B1 la requête portera sur la T1_DB1
6 cases à cocher de coche1 à coche6  (valeur 0 par défaut) + 6 contrôles indépendants  de Txt1 à Txt6 (inactifs par défaut)
***quand coche"x" à pour valeur -1 , Txt"x" devient actif et vide et la valeur saisie dans Txt"x" servira de critère dans la requête
1 bouton "valider"

J'en arrive à mon problème :
Je n'arrive pas à ecrire mon instruction WHERE suivant les valeurs saisies dans les Txt"x" quand  les cases à cocher correspondantes sont cochées (valeur -1).
Ex : les coches 1,3 et 6 sont cochées donc les contrôles Txt1,3 et 6 sont actifs et vides , je saisi les valeurs XXX dans Txt1 ,
YYY dans Txt3 et ZZZ dans Txt6.
Sur l'événement click du bouton "valider" :

Private Sub Commande202_Click()

Dim cnx As ADODB.Connection
Dim rsResultat As New ADODB.RecordsetIf Cad_ChoixService.Value 1 And Cad_ChoixTrim.Value 1 Then

DoCmd.Hourglass True


stSql = "INSERT INTO T_TempLiv (dateexp,tour,tra,HeureTopDep,CodeChf,TypeChf,cam,CodeChrg,pdv,eqc,NumSup,SnumSup,codpro,Ds1pro,anapro,fampro,pcbpro,UvcCde,ColCde,UvcSrv,ColSrv,UvcLiv,ColLiv)" _
        & "SELECT * FROM T_HistoLiv_Tri1" _
        & " WHERE  ???????????????????????????????????????????????
       
Set cnx = CurrentProject.Connection
rsResultat.Open stSql, cnx


DoCmd.Hourglass False


Set rsResultat = Nothing
cnx.Close
Set cnx = Nothing
End If
End Sub

Merci pour votre aide .

2 réponses

sangdorme Messages postés 10 Date d'inscription vendredi 22 février 2002 Statut Membre Dernière intervention 1 octobre 2010
24 oct. 2008 à 15:10
bonjour

si j'ai bien compris ton probleme, tu souhaite extraire des données en fonction des données de tes tables

le critere de sélection etant la base la table et en suite des criteres


tu dois construire ton select en concatenant tout tes criteres select * from <nombase>.<nomtable> where <nomcolonne> valeur text1 and <nomcolonne> valeur text2 etc

en fonction des valeurs de text saisis

Sangdorme
0
itmli Messages postés 2 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 24 octobre 2008
24 oct. 2008 à 16:30
Bonjour,

tout d'abord merci pour la réponse .

Oui c'est bien cela , et je construit bien mon SELECT dans ce sens .
admettons que je fasse un select * from <nombase>.<nomtable> where <nomcolonneA> <gras>valeur text1 and <nomcolonneB> valeur text2</gras> .
Dans mon formulaire je coche la case correspondante à l'activation du contrôle ou je vais saisir la   valeur text1= toto  mais que je ne coche pas la case
correspondante à l'activation du contrôle ou l'on doit saisir la  valeur text2 ( ce contrôle ne sera donc pas actif et je ne pourrais rien saisir dedans ) 
Mon select devrait alors donner :select * from <nombase>.<nomtable> where <nomcolonneA> <gras>valeur text1 (toto) and <nomcolonneB> valeur text2</gras> (rien)
et cela devrait me renvoyer tous les enregistrements de ma table dont le <nomcolonneA> = "toto"
ou si
Dans mon formulaire je coche la case correspondante à l'activation du contrôle ou je vais saisir la   valeur text2= tata  mais que je ne coche pas la case
correspondante à l'activation du contrôle ou l'on doit saisir la  valeur text1 ( ce contrôle ne sera donc pas actif et je ne pourrais rien saisir dedans )
Mon select devrait alors donner :
select * from <nombase>.<nomtable> where <nomcolonneA> =valeur text1 (rien)and <nomcolonneB> = valeur text2 (tata)
et cela devrait me renvoyer tous les enregistrements de ma table dont le <nomcolonneB> = "tata"
ou si
Dans mon formulaire je coche la case correspondante à l'activation du contrôle ou je vais saisir la  valeur text1= toto et que je coche aussi la case
correspondante à l'activation du contrôle ou l'on doit saisir la  valeur text2 = tata ( les deux contrôles seront donc actifs et je ne pourrais  saisir dans les deux)
Mon select devrait alors donner : select * from <nombase>.<nomtable> where <nomcolonneA> valeur text1 (toto) and <nomcolonneB> valeur text2 (tata)et cela devrait me renvoyer tous les enregistrements de ma table dont le <nomcolonneA> "toto" ET dont le <nomcolonneB> "tata"

le code plante dans les deux premiers cas et fonctionne dans le troisieme cas .

En esperant avoir été un peu plus clair .
Merci pour votre analyse .
0
Rejoignez-nous