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

VB 6 et antérieur Discussion :

Faire une requête pour Access selon des Checkbox


Sujet :

VB 6 et antérieur

  1. #1
    Invit-é
    Invité(e)
    Par défaut Faire une requête pour Access selon des Checkbox
    Hello,

    Je dois faire des requêtes pour récupérer des données pour Access mais le souci est que c'est selon une douzaine de checkbox. Comment faire pour ne pas tester toutes les combinaisons possibles ? Il n'y pas moyen de vérifier lesquels sont cochés avec un booléen qui se remplacerait directement dans le 'WHERE' de la requête ?

    Merci pour votre aide.
    Arnaud.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Salut,

    J'ai utilisé un truc comme ça pour vérifier quelles checkbox étaient cochées parmi une série de 16 : cf. Bitwise (comparaison bit à bit)

    Imagine-toi une séquence binaire avex x bit de poids différents.

    Pour vulgariser, tu indexes tes checkbox, de 0 à x (on prend 15 comme exemple = 16 checkbox) et tu leur attribues ensuite une valeur en fonction de l'index 2^0, 2^1, 2^2 -> 2^15 correspondant à une valeur cochée (0 si non cochée)
    Tu additionnes ensuite chaque valeur pour obtenir un nombre unique, ce nombre est enregistré dans ta base et représente la combinaison de tes checkbox plutôt que x champs booléens (un pour chaque checkbox)

    Pour lire la séquence binaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For ix = 0 to 15
       If rst!seq And 2^ix Then '/ Comparaison bit à bit
             CheckBox(ix).Value = Checked
       Else
             CheckBox(ix).Value = UnChecked 
       End If
    Next ix

  3. #3
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Bon voila une technique que j'utilise et qui n'etait pas si ma que ca.

    En fait elle consiste a construire progressivement ca requette en fonction de oui ou non si le checkbox (dans ton cas) est coche.

    Pour ce faire je vais te donner deux methodes, gardant le mme principe neanmoins.

    Sans utilisation du groupe de controle. C'est vrai je ne te conseillerais pas cette methode, mais on ne sais jamais
    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
     
    'Dans le code je presume que l'element a ajouter dans la requette
    'ce trouve dans le Caption du Checkbox
    Dim CBox As Control
     
    Private Sub Command1_Click()
        Dim SQL As String
        Dim SQLBrut As String
     
        SQL = "Select * from Table Where"
     
        'Generation du code brut de la requette
        For Each Cbox In Form1.Controls
            If TypeOf Cbox Is CheckBox Then
                If Cbox.Value Then
                    SQLBrut = "& " & Cbox.Caption & " &" & SQLBrut
                End If
            End If
        Next
     
        SQL = SQL + SQLBrut
     
        'Traitement de la requette
        SQL = Replace(SQL, "&&", "And")
        SQL = Replace(SQL, "&", "")
     
        MsgBox SQL
    End Sub

    En utilisant le groupe de controle, Que je te conseille
    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
     
    Private Sub Command1_Click()
        Dim SQL As String
        Dim SQLBrut As String
        Dim NbCheck As Integer
        Dim i As Integer
     
        NbCheck = 4     'NbCheck est nombre de CheckBox
                        'que tu as. Dans ton cas 12.
        SQL = "Select * from Table Where"
     
        'Generation du code brut de la requette
        For i = 0 To NbCheck - 1
            If CBox(i).Value Then
                SQLBrut = "& " & CBox(i).Caption & " &" & SQLBrut
            End If
        Next
     
        SQL = SQL + SQLBrut
     
        'Traitement de la requette
        SQL = Replace(SQL, "&&", "And")
        SQL = Replace(SQL, "&", "")
     
        MsgBox SQL
    End Sub
    Desole je n'ai pas tester le code (pas VB sous la main). Mais ca devrais marcher.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

Discussions similaires

  1. Faire une requête pour 1 pays et le reste du monde
    Par lodan dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/06/2010, 09h30
  2. Réponses: 2
    Dernier message: 27/05/2009, 19h54
  3. Aide pour une requête sur Access
    Par psgkiki dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/05/2007, 11h34
  4. Réponses: 3
    Dernier message: 13/05/2006, 11h06
  5. problème pour faire une requête
    Par mitchbuck dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/11/2005, 22h48

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