IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Valider si mon champs est null, pour ensuite faire recherche


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Points : 50
    Points
    50
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
    Merci à tous!

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    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.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    J'ai trouvé l'erreur pour les liste déroulante. Par contre, si quelqu'un peut m'expliquer le pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!!

  5. #5
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    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.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Test pour voir si un champ est null ou pas
    Par ddove53 dans le forum ASP
    Réponses: 2
    Dernier message: 03/02/2010, 15h33
  2. [Etats] [2000] Et si mon champ est vide.
    Par DamKre dans le forum IHM
    Réponses: 15
    Dernier message: 22/12/2007, 13h30
  3. [MySQL] Savoir si un champ est NULL
    Par hpavavar dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/03/2007, 19h40
  4. [MySQL] Savoir si un champ est NULL ou pas
    Par Keulig dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/02/2006, 18h32
  5. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2003, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo