Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/09/2011, 12h03   #1
Nouveau Membre du Club
 
Femme elkhansaa lachqar
Étudiant
Inscription : juillet 2011
Messages : 68
Détails du profil
Informations personnelles :
Nom : Femme elkhansaa lachqar
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : juillet 2011
Messages : 68
Points : 26
Points : 26
Par défaut formulaire de recherche

Bonjour,

j'ai 4 critères de recherche dans un formulaire et j'ai créer une requête pour chaque critère mais j'arrive pas a faire concaténation des toutes les requête ( par exemple si j'ai un recherche par 2 critères ou plus )
le code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim SQL As String
SQL = "SELECT [N° Compteur], Port, Société, Bateau FROM [Table Compteurs Clients] "
If Me.FJRListe_Compteur <> "" Then
    SQL1 = SQL & "WHERE  [Table Compteurs Clients].[N° Compteur]=FJRListe_Compteur "
 End If
If Me.FJRListe_Societe <> "" Then
    SQL2 = SQL & " [Table Compteurs Clients].Société=FJRListe_Societe "
 End If
If Me.FJRListe_Port <> "" Then
    SQL3 = SQL & "[Table Compteurs Clients].Port=FJRListe_Port"
 End If
 If Me.FJRListe_Societe <> "" Then
    SQL4 = SQL & "[Table Compteurs Clients].Bateau=FJRListe_Bateau "
 End If
 
SQL = SQL & SQL1 & SQL2 & SQL3 & SQL4
Merci d'avance
elkhansa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 15h32   #2
Membre actif
 
Avatar de solaar
 
Homme
Inscription : septembre 2007
Messages : 355
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 355
Points : 163
Points : 163
Envoyer un message via Yahoo à solaar
Regarde ce que la concaténation de donne comme requête.
dans la fenêtre exécution.
de plus dont WHERE c'est seulement que pour SQL1 non les autres !
solaar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 11h14   #3
Invité de passage
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 4
Points : 4
si tu cherche toujours la solution, dans ta close WHERE utilise le mot clés AND par exemple:
Code :
1
2
3
SQL = "SELECT [N° Compteur], Port, Société, Bateau FROM [Table Compteurs Clients] "
SQL = SQL & "WHERE [Table Compteurs Clients].[N° Compteur]=FJRListe_Compteur "
SQL = SQL & "AND [Table Compteurs Clients].Société=FJRListe_Societe"
Ainsi ta recherche prendra ces deux critères en compte. Rajoute simplement des AND dans ta close WHERE pour augmenter le nombre de critères.
Ensuite pour beaucoup de critères la solution de tout mettre dans des if ... else les uns à la suite des autres devient très lourd très vite.

Donc le mieu reprends ton code, met un AND à la fin de chaque critère (sauf le dernier), délace le WHERE à la fin de SQL = "SELECT ... WHERE "

Ensuite au début de ton code initialise tes variables :
Code :
1
2
3
4
SQL = ""
SQL1 = ""
SQL2 = ""
SQL3 = ""
et avant d'utiliser SQL

vire le WHERE ou le AND de fin comme ça :
Code :
1
2
3
4
5
6
If Right(SQL, 5) = "WHERE" Then
    SQL= Left(SQL, InStr(SQL, "WHERE") - 2)
End If
If Right(SQL, 4) = "AND" Then
    SQL = Left(SQL, InStrRev(SQL, "AND") - 2)
End If
Soit pour un final :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'Déclarations
Dim SQL As String, SQL1 As Integer, SQL2 As Integer, SQL3 As Integer, SQL4 As Integer
 
'Init
SQL = ""
SQL1 = ""
SQL2 = ""
SQL3 = ""
SQL4 = ""
 
'Création du SQL
SQL = "SELECT [N° Compteur], Port, Société, Bateau FROM [Table Compteurs Clients] WHERE"
If Me.FJRListe_Compteur <> "" Then
    SQL1 = " [Table Compteurs Clients].[N° Compteur]=FJRListe_Compteur AND"
 End If
If Me.FJRListe_Societe <> "" Then
    SQL2 = " [Table Compteurs Clients].Société=FJRListe_Societe AND"
 End If
If Me.FJRListe_Port <> "" Then
    SQL3 = " [Table Compteurs Clients].Port=FJRListe_Port AND"
 End If
 If Me.FJRListe_Bateau <> "" Then
    SQL4 = " [Table Compteurs Clients].Bateau=FJRListe_Bateau"
 End If
 
SQL = SQL & SQL1 & SQL2 & SQL3 & SQL4
 
'Vérifie la fin de la requète
If Right(SQL, 5) = "WHERE" Then
    SQL = Left(SQL, InStr(SQL, "WHERE") - 2)
End If
If Right(SQL, 4) = "AND" Then
    SQL = Left(SQL, InStrRev(SQL, "AND") - 2)
End If
j'ai fais ça vite donc je ne pense pas que sa marche, corrige les erreurs
Après tu mets deux fois la vérification sur FJRListe_Societe j'ai donc pris la liberter de changer la dernière vérification pour FJRListe_Bateau
Kaëléphine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 15h09   #4
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bonjour,

Regarde dans les tutos, il y a la solution

Le principe est de créer une Sub que tu appelles à chaque modification de tes critères de recherche. De manière à avoir une requête dynamique qui se met à jour en fonction des choix.

Quand aucun critère de recherche n'est spécifié, l'astuce est d'avoir une clause WHERE par défaut qui te ressort tous les résultats (par exemple : "WHERE monID<>0")

Voici un exemple (un peu barbare car c'est sur une de mes vieilles bases) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Private Sub RefreshQuery()
Dim Sel As String
Dim Wh As String
Dim SQL As String
 
 
Sel = "SELECT T_Films.ID_Film FROM T_Personnes RIGHT JOIN (R_Acteurs INNER JOIN T_Films ON R_Acteurs.ID_Film = T_Films.ID_Film) ON T_Personnes.ID_personne = T_Films.Realisateur "
Wh = "WHERE (T_Films.ID_Film <>0)"
If Me.Chk_Titre Then
    Wh = Wh & " And (Titre like '*" & Me.Rqt_Titre & "*')"
End If
If Me.Chk_Genre Then
    Wh = Wh & " And  (IDGenre1 = " & Me.Rqt_Genre & " OR IDGenre2 = " & Me.Rqt_Genre & " OR IDGenre3 = " & Me.Rqt_Genre & ")"
End If
If Me.Chk_Realisateur Then
    Wh = Wh & " And ((Prenom like '*" & Me.Rqt_Realisateur & "*') OR (Nom like '*" & Me.Rqt_Realisateur & "*'))"
End If
If Me.Chk_Acteur Then
    Wh = Wh & " And (Acteur like '*" & Me.Rqt_Acteur & "*')"
End If
If Me.Chk_Annee Then
    Wh = Wh & " And (Annee = '" & Me.Rqt_Annee & "')"
End If
If Me.Chk_Age Then
    Wh = Wh & " And (IDAgeLegal = " & Me.Rqt_Age & ")"
End If
If Me.Chk_Pays Then
    Wh = Wh & " And (IDPays_film = " & Me.Rqt_Pays & ")"
End If
SQL = Sel & Wh & " GROUP BY T_Films.ID_Film, T_Films.Titre ORDER BY T_Films.Titre;"
 
'... Suite du code
End Sub
__________________
L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h17.


 
 
 
 
Partenaires

Hébergement Web