Problème SQL
Fermé
Anddreaa
Messages postés
11
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
3 septembre 2020
-
Modifié le 2 sept. 2020 à 11:11
Anddreaa Messages postés 11 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 3 septembre 2020 - 3 sept. 2020 à 18:12
Anddreaa Messages postés 11 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 3 septembre 2020 - 3 sept. 2020 à 18:12
A voir également:
- Problème SQL
- Logiciel sql - Télécharger - Bases de données
- Sql server recovery - Télécharger - Gestion de données
- Requête sql pix - Forum Python
- Dupliquer une table sql ✓ - Forum Programmation
- Sql commence par ✓ - Forum Webmastering
5 réponses
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
2 sept. 2020 à 13:38
2 sept. 2020 à 13:38
bonjour,
merci d'utiliser les balises de code, en précisant basic, quand tu partages du VBA: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
tu ne décris pas ton soucis. as-tu un message d'erreur, ou un résultat inattendu?
as-tu testé à la main la requête SQL pour obtenir une requête qui fonctionne?
peut-être le soucis est-il ici:
comme tu n'utilises pas like, il n'y a pas lieu d'utiliser les *.
ce serait donc peut-être:
par ailleurs, je suis surpris de ton utilisation des points d'exclamations dans la requête SQL. de plus, comme il n'y a qu'une table, il n'est pas utile d'en spécifier le nom.
donc je ferais:
merci d'utiliser les balises de code, en précisant basic, quand tu partages du VBA: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
tu ne décris pas ton soucis. as-tu un message d'erreur, ou un résultat inattendu?
as-tu testé à la main la requête SQL pour obtenir une requête qui fonctionne?
peut-être le soucis est-il ici:
SQL = SQL & "And [1 Identification]!Rubrique = '*" & Me.cmbRechRubrique & "*' "
comme tu n'utilises pas like, il n'y a pas lieu d'utiliser les *.
ce serait donc peut-être:
SQL = SQL & "And [1 Identification]!Rubrique = '" & Me.cmbRechRubrique & "' "
par ailleurs, je suis surpris de ton utilisation des points d'exclamations dans la requête SQL. de plus, comme il n'y a qu'une table, il n'est pas utile d'en spécifier le nom.
donc je ferais:
SQL = SQL & " And Rubrique = '" & Me.cmbRechRubrique & "' "
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
2 sept. 2020 à 13:49
2 sept. 2020 à 13:49
pour simplifier, et éviter des soucis si "Where" est présent dans un critère de recherche, au lieu de
je ferais ainsi:
SQL = "SELECT N°, Nom, Prénom, Rubrique.value, Organisation, Dossier, Tel, Mail FROM [1 Identification] Where [1 Identification]!N° > 0" If Not Me.chkNom Then SQL = SQL & "And [1 Identification]!Nom like '*" & Me.txtRechNom & "*' " End If If Not Me.chkPrenom Then SQL = SQL & "And [1 Identification]!Prénom like '*" & Me.txtRechPrenom & "*' " End If If Not Me.chkOrganisation Then SQL = SQL & "And [1 Identification]!Organisation like '*" & Me.txtRechOrganisation & "*' " End If If Not Me.chkDossier Then SQL = SQL & "And [1 Identification]!Dossier like '*" & Me.txtRechDossier & "*' " End If If Not Me.chkRubrique Then SQL = SQL & "And [1 Identification]!Rubrique = '*" & Me.cmbRechRubrique & "*' " End If SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1)) SQL = SQL & ";"
je ferais ainsi:
SQL = "SELECT N°, Nom, Prénom, Rubrique.value, Organisation, Dossier, Tel, Mail FROM [1 Identification] " SQLWhere = " true " If Not Me.chkNom Then SQLWhere = SQLWhere & "And [1 Identification]!Nom like '*" & Me.txtRechNom & "*' " End If If Not Me.chkPrenom Then SQLWhere = SQLWhere & "And [1 Identification]!Prénom like '*" & Me.txtRechPrenom & "*' " End If If Not Me.chkOrganisation Then SQLWhere = SQLWhere & "And [1 Identification]!Organisation like '*" & Me.txtRechOrganisation & "*' " End If If Not Me.chkDossier Then SQLWhere = SQLWhere & "And [1 Identification]!Dossier like '*" & Me.txtRechDossier & "*' " End If If Not Me.chkRubrique Then SQLWhere = SQLWhere & "And [1 Identification]!Rubrique = '*" & Me.cmbRechRubrique & "*' " End If SQL = SQL & " where " & SQLWhere
Anddreaa
Messages postés
11
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
3 septembre 2020
Modifié le 2 sept. 2020 à 14:45
Modifié le 2 sept. 2020 à 14:45
Option Compare Database Option Explicit Private Sub boutoncompta_Click() End Sub Private Sub chkDossier_Click() If Me.chkDossier Then Me.txtRechDossier.Visible = False Else Me.txtRechDossier.Visible = True End If RefreshQuery End Sub Private Sub chkNom_Click() If Me.chkNom Then Me.txtRechNom.Visible = False Else Me.txtRechNom.Visible = True End If RefreshQuery End Sub Private Sub chkOrganisation_Click() If Me.chkOrganisation Then Me.txtRechOrganisation.Visible = False Else Me.txtRechOrganisation.Visible = True End If RefreshQuery End Sub Private Sub chkPrenom_Click() If Me.chkPrenom Then Me.txtRechPrenom.Visible = False Else Me.txtRechPrenom.Visible = True End If RefreshQuery End Sub Private Sub chkRubriqueGénérale_Click() If Me.chkRubriqueGénérale Then Me.cmbRechRubrique.Visible = False Else Me.cmbRechRubrique.Visible = True End If RefreshQuery End Sub Private Sub cmbRechRubrique_BeforeUpdate(Cancel As Integer) RefreshQuery End Sub Private Sub chkRubrique_Click() End Sub Private Sub Form_Load() Dim ctl As Control For Each ctl In Me.Controls Select Case Left(ctl.Name, 3) Case "chk" ctl.Value = -1 Case "lbl" ctl.Caption = "- * - * -" Case "txt" ctl.Visible = False ctl.Value = "" Case "cmb" ctl.Visible = False End Select Next ctl Me.lstResults.RowSource = "SELECT N°, Nom, Prénom, Rubrique.value, Organisation, Dossier, Tel, Mail FROM [1 Identification] ORDER BY [1 Identification].Nom;" Me.lstResults.Requery End Sub Private Sub RefreshQuery() Dim SQL As String Dim SQLWhere As String SQL = "SELECT N°, Nom, Prénom, Rubrique.value, Organisation, Dossier, Tel, Mail FROM [1 Identification] " SQLWhere = " true " If Not Me.chkNom Then SQL = SQL & "And [1 Identification].Nom = '" & Me.txtRechNom & "' " End If If Not Me.chkPrenom Then SQL = SQL & "And [1 Identification].Prénom = '" & Me.txtRechPrenom & "' " End If If Not Me.chkOrganisation Then SQL = SQL & "And [1 Identification].Organisation = '" & Me.txtRechOrganisation & "' " End If If Not Me.chkDossier Then SQL = SQL & "And [1 Identification].Dossier = '" & Me.txtRechDossier & "' " End If If Not Me.chkRubrique Then SQL = SQL & "And [1 Identification].Rubrique = '" & Me.cmbRechRubrique & "' " End If SQL = SQL & " where " & SQLWhere Me.lblStats.Caption = DCount("*", "[1 Identification]", SQLWhere) & " / " & DCount("*", "[1 Identification]") Me.lstResults.RowSource = SQL Me.lstResults.Requery End Sub Private Sub lstResults_DblClick(Cancel As Integer) DoCmd.OpenForm "Formulaire MEMBRES", acNormal, , "[N°] = " & Me.lstResults, , acDialog End Sub Private Sub txtRechDossier_BeforeUpdate(Cancel As Integer) RefreshQuery End Sub Private Sub txtRechNom_BeforeUpdate(Cancel As Integer) RefreshQuery End Sub Private Sub txtRechOrganisation_BeforeUpdate(Cancel As Integer) RefreshQuery End Sub Private Sub txtRechPrenom_BeforeUpdate(Cancel As Integer) RefreshQuery End Sub
RV71
Messages postés
610
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
27 novembre 2024
31
Modifié le 2 sept. 2020 à 17:46
Modifié le 2 sept. 2020 à 17:46
Bonjour,
j'ai une base où je filtre des listes de choix avec plusieurs valeurs possible, voici une partie du code si tu veux t'en inspirer.
A+
j'ai une base où je filtre des listes de choix avec plusieurs valeurs possible, voici une partie du code si tu veux t'en inspirer.
Dim varI As Variant 'on déclare une variable de type variant, donc peut être de n'importe quel type Dim strFiltre As String 'on dit que le filtre global sera une chaine de caracteres alphanum strFiltre = "" 'au départ, on dit que le filtre global ne contient rien, donc, on ne filtre rien If Me.listetype.ItemsSelected.Count = 0 Then 'on regarde la liste de type, si on n'a pas sélectionné (=0) 'on passe à la section suivante avec goto.... GoTo section_statuts Else 'sinon, cela veut dire qu'il a au moins un élément de la liste sélectionné For Each varI In Me!listetype.ItemsSelected 'pour chaque élément sélectionné dans la liste --> If strFiltre_Type <> "" Then strFiltre_Type = strFiltre_Type & " OR " 'si ce n'est pas le premier élément du filtre, on rajoute l'élément sélectionné avec un "OR" pour la suite de la boucle strFiltre_Type = strFiltre_Type & "([Lookup_type].[type]=" & "'" & Me!listetype.ItemData(varI) & "'" & ")" Next varI 'on boucle chaque élément de la liste strFiltre = strFiltre & "(" & strFiltre_Type & ")" End If
A+
Anddreaa
Messages postés
11
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
3 septembre 2020
3 sept. 2020 à 14:27
3 sept. 2020 à 14:27
Bonjour,
Merci beaucoup.
Ce code est utilisé dans un formulaire de recherche ? Car j'arrive à filtrer quand j'insère des requêtes ou des formulaires pour avoir des listings, mon soucis est vraiment dans mon formulaire de base, quand je veux afficher tous les membres par rubrique.
Ex: je souhaite avoir rapidement l’œil sur les membres faisant partis de ma rubrique "famille". A côté de "recherche par rubrique" je dois avoir une liste déroulante avec toutes mes rubriques et je devrais pouvoir cliquer sur "famille" puis lancer la recherche afin d'avoir tout mes membres "famille"...
Ça fonctionne parfaitement avec "nom", "prénom", ... Je ne comprends pas.
Merci beaucoup.
Ce code est utilisé dans un formulaire de recherche ? Car j'arrive à filtrer quand j'insère des requêtes ou des formulaires pour avoir des listings, mon soucis est vraiment dans mon formulaire de base, quand je veux afficher tous les membres par rubrique.
Ex: je souhaite avoir rapidement l’œil sur les membres faisant partis de ma rubrique "famille". A côté de "recherche par rubrique" je dois avoir une liste déroulante avec toutes mes rubriques et je devrais pouvoir cliquer sur "famille" puis lancer la recherche afin d'avoir tout mes membres "famille"...
Ça fonctionne parfaitement avec "nom", "prénom", ... Je ne comprends pas.
RV71
Messages postés
610
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
27 novembre 2024
31
3 sept. 2020 à 14:33
3 sept. 2020 à 14:33
Bonjour,
oui c'est une partie du code d'un formulaire de recherche multi critères
J'ai mis ici le code qui filtre sur une zone de liste à choix multiples, il y en a une dizaine dans le form.
strfiltre est donc au final la clause WHERE et est incrémenté par les différentes zones de liste.
Pour récupérer les valeurs sélectionnées dans la zone de liste "Listetype" (son nom dans mon formulaire) je boucle sur la propriété .ItemData de cette zone.
A+
oui c'est une partie du code d'un formulaire de recherche multi critères
J'ai mis ici le code qui filtre sur une zone de liste à choix multiples, il y en a une dizaine dans le form.
strfiltre est donc au final la clause WHERE et est incrémenté par les différentes zones de liste.
Pour récupérer les valeurs sélectionnées dans la zone de liste "Listetype" (son nom dans mon formulaire) je boucle sur la propriété .ItemData de cette zone.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
3 sept. 2020 à 15:44
3 sept. 2020 à 15:44
cela fonctionne ainsi:
j'ai supprimé le test sur Me.chkRubrique, je ne vois pas trop à quoi il sert.
j'ai aussi changé la requête utilisée pour peupler la liste des rubriques:
il y a peut-être moyen de faire autrement et mieux.
difficile de déterminer cela, j'ai l'impression qu'il y a beaucoup de manquements et d'hésitations dans la base.
SQLWhere = SQLWhere & "And [1 Identification].Rubrique.Value = '" & Me.cmbRechRubrique & "' "
j'ai supprimé le test sur Me.chkRubrique, je ne vois pas trop à quoi il sert.
j'ai aussi changé la requête utilisée pour peupler la liste des rubriques:
SELECT distinct [1 Identification].Rubrique.Value FROM [1 Identification] ;
il y a peut-être moyen de faire autrement et mieux.
difficile de déterminer cela, j'ai l'impression qu'il y a beaucoup de manquements et d'hésitations dans la base.
Anddreaa
Messages postés
11
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
3 septembre 2020
3 sept. 2020 à 16:10
3 sept. 2020 à 16:10
Je vais tester, merci !!
2 sept. 2020 à 14:36
Tout d'abord, désolé pour les codes c'est la première fois que je poste sur le forum je ferais attention la prochaine fois.. Je peux les repartager en commentaire pour plus de lisibilité.
Pour les points d'exclamations, il est vrai qu'ils ne sont pas nécessaire je pensais devoir mettre un indicateur pour qu'il n'y est pas de problème lors de l'exécution.
Mon problème est spécifié : j'ai eu plusieurs messages d'erreurs, et le bouton "recherche par rubrique" ne fonctionne plus. Voici le message qui s'affiche : "Le champ à plusieurs valeurs <<[1 Identification]!Rubrique>> ne peut pas être utilisé dans une clause WHERE ou HAVING."
J'ai testé ce que vous me conseillez mais le soucis reste le même.
Par ailleurs, ma base contient 6 bases liées les unes aux autres. Ce formulaire (photo jointe dans ma demande) ne dépend que de ma table "1 identification". Le problème avec les messages d'erreurs est apparu lorsque j'ai changé le format de mon champ "rubrique" en liste de choix à plusieurs valeurs (contenues dans "rubrique.value").
Modifié le 2 sept. 2020 à 16:25
quand tu écris "ma base contient 6 bases", veux-tu écrire "ma base contient 6 tables"?
je recommande de tester les requêtes SQL à la main, hors VBA, pour determiner la syntaxe correcte.
pourrais-tu partager ton fichier, pour que nous puissions examiner comment tu as créé le champ "rubrique"?
sinon, crée une requête avec un critère sur la valeur du champ rubrique, et, quand elle fonctionne, examine la syntaxe SQL de cette requête. cela t'aidera peut-être.
2 sept. 2020 à 16:35
Modifié le 3 sept. 2020 à 17:39
Oui je voulais bien dire "tables"...
J'ai testé en créant une requête avec un critère sur mon champ rubrique, pensant trouver mon erreur j'ai donc appliqué le critère dans ma SQL mais ça ne fonctionne toujours pas.
Voici le lien pour accéder à ma base de données : base de données supprimée par la Modération CCM semble contenir des données confidentielles, ne prendre en compte que les relations qui existent déjà et ne pas faire attention au reste. Elle est en cours de nettoyage pour la rendre moins lourde et plus intuitive.
Merci pour l'aide.
3 sept. 2020 à 15:01