Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 11/01/2012, 17h35   #1
Membre à l'essai
 
Inscription : octobre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 64
Points : 22
Points : 22
Par défaut Valider si mon champs est null, pour ensuite faire recherche

Bonjour,

J'essaie de faire un formulaire pour permettre à l'usager de rechercher dans une table d'inventaire. Étant donné mon peu de connaissance en SQL et Access, j'ai réussi à trouver une base de donnée en exemple qui fait exactement ce que je veux et je me suis basé sur elle.

Voici mon code jusqu'à présent:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Option Compare Database
 
Private Sub RefreshQuery()
 
Dim SQLRecherche As String
Dim SQLWhere As String
 
SQLRecherche = "Select N°, Code_Barre, Type, Fabricant, Numéro_de_Produit, Longueur, Notes, Quotas, Total_en_inventaire From Inventaire Where Inventaire!N° <> 0 "
 
    If Not Me.CmbFabricant Then
        SQLRecherche = SQLRecherche & "And Inventaire!Fabricant = '*" & Me.CmbFabricant & "' "
    End If
 
    If Not Me.CmbNumeroProduit Then
        SQLRecherche = SQLRecherche & "And Inventaire!Numéro_de_Produit = '*" & Me.CmbNumeroProduit & "' "
    End If
 
    If Not Me.CmbType Then
        SQLRecherche = SQLRecherche & "And Inventaire!Type = '*" & Me.CmbType & "' "
    End If
 
    If Not Me.TxtCodeBarre Then
        SQLRecherche = SQLRecherche & "And Inventaire!Code_Barre like '*" & Me.TxtCodeBarre & "*' "
    End If
 
    If Not Me.TxtInventaire Then
        SQLRecherche = SQLRecherche & "And Inventaire!Total_en_inventaire like '*" & Me.TxtInventaire & "*' "
    End If
 
    If Not Me.TxtLongueur Then
        SQLRecherche = SQLRecherche & "And Inventaire!Longueur like '*" & Me.TxtLongueur & "*' "
    End If
 
    If Not Me.TxtNotes Then
        SQLRecherche = SQLRecherche & "And Inventaire!Notes like '*" & Me.TxtNotes & "*' "
    End If
 
    If Not Me.TxtQuotas Then
        SQLRecherche = SQLRecherche & "And Inventaire!Quotas like '*" & Me.TxtQuotas & "*' "
    End If
 
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
SQL = SQL & ";"
 
Me.LblNombreEntre.Caption = DCount("*", "Inventaire", SQLWhere) & " / " & DCount("*", "Inventaire")
Me.LSTresult.RowSource = SQL
Me.LSTresult.Requery
 
End Sub
 
Private Sub CmbFabricant_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub CmbNumeroProduit_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub CmbType_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub TxtCodeBarre_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub TxtInventaire_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub TxtLongueur_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub TxtNotes_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
 
Private Sub TxtQuotas_BeforeUpdate(Cancel As Integer)
 
RefreshQuery
 
End Sub
J'ai copié la structure de l'exemple que j'avais, et je l'ai adapté à ma table. Le problème est que rien ne fonctionne :p J'ai des erreurs de syntaxes quand je valide mon champs. Pour l'affichage des résultats, j'ai des erreurs aussi. Alors, le principe étant qu'aussitôt que l'usager écrit quelque chose, les résultats se mettent à jour automatiquement. L'exemple sur lequel je me base, a des checkbox pour activer les critères de recherches, alors que moi je veux que quand le champs est Null, rien ne se passe.

Je sais pas si j'ai donné assez d'explication, mais merci du coup de main! :p
asvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 20h43   #2
Membre à l'essai
 
Inscription : octobre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 64
Points : 22
Points : 22
J'ai réussi à régler un de mes problèmes, soit les erreurs au niveau de la valeur de mes champs, voici mon code pour régler le problème:

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
35
36
37
38
39
40
 
If Not Me.CmbFabricant.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Fabricant = '*" & Me.CmbFabricant & "' "
    End If
 
    If Not Me.CmbNumeroProduit.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Numéro_de_Produit = '*" & Me.CmbNumeroProduit & "' "
    End If
 
    If Not Me.CmbType.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Type = '*" & Me.CmbType & "' "
    End If
 
    If Not Me.TxtCodeBarre.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Code_Barre like '*" & Me.TxtCodeBarre & "*' "
    End If
 
    If Not Me.TxtInventaire.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Total_en_inventaire like '*" & Me.TxtInventaire & "*' "
    End If
 
    If Not Me.TxtLongueur.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Longueur like '*" & Me.TxtLongueur & "*' "
    End If
 
    If Not Me.TxtNotes.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Notes like '*" & Me.TxtNotes & "*' "
    End If
 
    If Not Me.TxtQuotas.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Quotas like '*" & Me.TxtQuotas & "*' "
    End If
 
'SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
'SQL = SQL & ";"
 
'Me.LblNombreEntre.Caption = DCount("*", "Inventaire", SQLWhere) & " / " & DCount("*", "Inventaire")
'Me.LSTresult.RowSource = SQL
'Me.LSTresult.Requery
Me reste à trouver comment faire fonctionner la fonction de recherche dans ma table, et faire afficher les choix en conséquences de ce qui est inscrit dans mes champs textes. Si vous avez des idées de solution, car pour l'instant, c'est du chinois! :p

Surtout ce code, je ne comprends pas ce qu'il fait exactement?, quelqu'un peut m'aider? Il définit la variable, mais définie quoi au juste? :p
Code :
1
2
 
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
Merci à tous!
asvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 22h28   #3
Membre à l'essai
 
Inscription : octobre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 64
Points : 22
Points : 22
J'ai trouvé une autre de mes erreurs! Erreur de nom de variable, ma variable s'appelle SQLRecherche et non SQL comme dans l'exemple.

Une fois remplacé dans mon code, tout fonctionne à 80%. Il a fallu que je comprenne que le champs liste, on devait lui dire combien de colonne il devait afficher, etc.

J'ai un problème, c'est au niveau des champs de liste déroulante. Pour mes textebox la recherche fonctionnent super bien, mais les listes déroulantes n'est ne ce passe. Quelqu'un a une idée du pourqoi. Les listes déroulantes ne donnent aucun résultats?

Merci.
asvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 23h06   #4
Membre à l'essai
 
Inscription : octobre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 64
Points : 22
Points : 22
J'ai trouvé l'erreur pour les liste déroulante. Par contre, si quelqu'un peut m'expliquer le pourquoi.

Code :
1
2
3
4
 
If Not Me.CmbFabricant.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Fabricant = '*" & Me.CmbFabricant & "' "
    End If
Je dois supprimer l'étoile
Code :
1
2
3
If Not Me.CmbFabricant.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Fabricant = '" & Me.CmbFabricant & "' "
    End If
Mais si j'essaie de comprendre, ce bout de code veut dire:
- Si la valeur de CmbFabricant n'est pas égal à ""(soit rien), alors lance ma requête SQL select pour aller chercher dans ma table Inventaire la colonne Fabricant.
- Dans cette colonne, cherche si un champs est égal à la valeur de mon champs dans mon formulaire.

Je crois que ma logique est bonne. La question est à quoi sert " ' " avant et après l'étoile? Elle délimite quoi ou à quoi elle sert?

L'étoile *? en principe, elle veut dire "tout", bref peut importe ce qui est avant ou après la valeur de ma variable devrait être valide, donc les enregistrements devraient apparaitre. ex:

J'ai mis dans mon ma colonne Type, des champs allo, allo2, allo3, 2allo. En modifiant mon code comme ceci:
Code :
1
2
3
If Not Me.CmbFabricant.Value = "" Then
        SQLRecherche = SQLRecherche & "And Inventaire!Fabricant = '*" & Me.CmbFabricant & "*' "
    End If
Et en sélectionnant allo dans ma liste, les enregistrement avec allo, allo2, 2allo et allo3 devrait apparaitre?Mais ce n'est pas le cas! Est-ce à cause du =?

Compliquer le raisonnement, quelqu'un peut m'éclairer et m'expliquer comment sa fonctionne exactement?

Merci!!
asvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 08h52   #5
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 281
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 281
Points : 483
Points : 483
Bonjour.
Juste un bout de réponse, par rapport au signe *.
Effectivement, ça remplace n'importe quelle chaine de caractère(s).
Ce n'est pas compatible avec l'opérateur =. Quand on utilise l'astérisque, on utilise l'opérateur Like.
Cordialement.
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 21h15   #6
Membre à l'essai
 
Inscription : octobre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 64
Points : 22
Points : 22
Merci RobiPMS,

Tu réponds parfaitement à mon interrogation, en sachant que le signe = et l'* ne sont pas compatibe, la logique s'impose et je comprends le pourquoi des erreurs que j'avaient avec mon code!

Merci, problème résolu.
asvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h01.


 
 
 
 
Partenaires

Hébergement Web