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

VBA Access Discussion :

Erreur code dans moteur de recherche.Et quelques questions


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Erreur code dans moteur de recherche.Et quelques questions
    Bonjour,

    je suis novice en VBA et suis entrain de mettre en place un moteur de recherche tournant sous Access pour me permettre de filtrer les entrées d'une base de données (la table TableReftech)

    Je me suis fortement inspiré d'un exemple donné sur le site mais, pour une raison qui reste encore obscure, je n'arrive pas à comprendre pourquoi le moteur de recherche ne fonctionne pas. Quand je met un point d'arret dans le code, ce dernier est bien parcouru et je ne comprend pas pourquoi il ne renvoi pas le résultat attendu.

    Je vous envoie le code de ma base car je n'arrive pas à uploader la base directement. Avant cela, quelques explications sur le fonctionnement attendu:

    1. Lors de l'ouverture du moteur, aucun filtre n'est sélectionné.
    2. Lors de la coche sur un filtre, 2 options:
    a. Il s'agit d'une recherche en fonction d'une liste d'entrées issues elles même de la table TableReftech
    b. IL s'agit d'une recherche en fonction d'un morceau de texte saisi dans la fenêtre s'affichant lorsque le filtre est sélectionné.

    Enfin, les résultats sont dynamiques: les interactions avec les boutons des filtres se répercutent immédiatement sur les résultats de recherche.

    Dans le code suivant, vous verrez donc 2 types de filtres: les filtres exacts (basés sur une liste déroulante) et les filtres de textes. Je pense que le problème doit se passer dans l'affichage des résultats à la fin du code du la fonction Refreshquery.

    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    Option Compare Database
     
    Private Sub chkRechDescr_Click()
     
    If Me.chkRechDescr Then
        Me.txtRechDescr.Visible = False
    Else
        Me.txtRechDescr.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chkRechRef_Click()
     
    If Me.chkRechRef Then
        Me.txtRechRef.Visible = False
    Else
        Me.txtRechRef.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chkPhase_Click()
     
    If Me.chkPhase Then
        Me.cmbRechPhase.Visible = False
    Else
        Me.cmbRechPhase.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chkLignepdt_Click()
     
    If Me.chkLignepdt Then
        Me.cmbRechLignepdt.Visible = False
    Else
        Me.cmbRechLignepdt.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chkOuvrele_Click()
     
    If Me.ChkOuvrele Then
        Me.cmbRechOuvrele.Visible = False
    Else
        Me.cmbRechOuvrele.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chkPays_Click()
     
    If Me.chkPays Then
        Me.cmbRechPays.Visible = False
    Else
        Me.cmbRechPays.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chkTitre_Click()
     
    If Me.chkTitre Then
        Me.txtRechTitre.Visible = False
    Else
        Me.txtRechTitre.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub cmbRechLignepdt_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
     
    Private Sub cmbRechOuvrele_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
     
    Private Sub cmbRechPays_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
     
    Private Sub cmbRechPhase_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
     
    Private Sub lstResults_BeforeUpdate(Cancel As Integer)
     
    End Sub
     
    Private Sub txtRechDescr_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub txtRechRef_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub txtRechTitre_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    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 Reference, Pays, Phaseprojet, Ouvrageele, Ligneproduit, Description, Lien, Date FROM TableReftech;"
    Me.lstResults.Requery
     
    End Sub
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT Reference, Titre, Pays, Phaseprojet, Ouvrageele, Ligneproduit, Description, Lien, Date FROM TableReftech Where TableReftech!Reference <> 0 "
     
    If Not Me.chkPays Then
        SQL = SQL & "And TableReftech!Pays like '" & Me.cmbRechPays & "' "
    End If
    If Not Me.chkPhase Then
        SQL = SQL & "And TableReftech!Phaseprojet = '" & Me.cmbRechPhase & "' "
    End If
    If Not Me.ChkOuvrele Then
        SQL = SQL & "And TableReftech!Ouvrageele like '" & Me.cmbRechOuvrele & "' "
    End If
    If Not Me.chkLignepdt Then
        SQL = SQL & "And TableReftech!Ligneproduit like '" & Me.cmbRechLignepdt & "' "
    End If
    If Not Me.chkRechRef Then
        SQL = SQL & "And TableReftech!Reference = '*" & Me.txtRechRef & "*' "
    End If
    If Not Me.chkTitre Then
        SQL = SQL & "And TableReftech!Titre = '*" & Me.txtRechTitre & "*' "
    End If
    If Not Me.chkRechDescr Then
        SQL = SQL & "And TableReftech!Description = '*" & Me.txtRechDescr & "*' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = " / " & DCount("*", "TableReftech")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
     
    Private Sub lstResults_DblClick(Cancel As Integer)
     
       DoCmd.OpenForm "ModifierSupprimer", acNormal, , "[Reference] = " & Me.lstResults
     
    End Sub
    Dans un second temps, j'ai mis en place un écran d'accueil afin de permettre aux personnes de s'enregistrer: nom d'utilisateur et password. Les utilisateur sont tous enregistrés dans la table Tableemployees.
    Ce système fonctionne bien. J'aimerais maintenant, en fonction d'une coche que je rajouterai dans la table gérant les utilisateurs, pouvoir restreindre l'affichage de certains écrans uniquement aux utilisateurs souhaités.
    Quelqu'un peut il me donner une astuce pour pouvoir le faire ?

    Je vous remercie d'avoir pris le temps de me lire et espère que je pourrai arriver à dépatouiller ce code....

    Pierre

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    pierreferte,

    J'avoue ne pas comprendre RefreshQuery (personnellement j'utilise le me.refresh) mais tu ne devrais pas en avoir besoin ?
    Lorsque tu cliques sur tes checkbox les champs deviennent t'ils visibles ou invisibles suivant la valeur renseignée car à priori ton code me semble cohérent ??

    Ensuite pour ta deuxième question il faut modéliser une table des privilèges,une table des groupes (idéalement) et une table de jonction.


    T_privileges(id_privilege, description)
    T_groupes(id_groupe, description) ' ex comptable, technicien permettant de spécifier les utilisateurs au sein d'une communauté acceptant un certain nombre de privilèges
    T_utilsateurs(id_user, nom, prenom, motdepasse..., #id_groupe)
    Tj_groupesprivileges(#id_privilege,#id_groupe)

    Un écran te permettant de créer tes groupes/privileges et relier les deux afin d'alimenter les privileges à chaque groupe.
    Il te faudra modifier également ton écran utilisateur pour le joindre à un groupe (une listbox fera l'affaire)

    Ensuite une fonction publique (dans un module) acceptant comme argument l'id user et l'id_privilege te permettra de contrôler l'accès à un écran, une fonctionnalité... Le retour de cette fonction sera booleen (true ou false) suivant que l'accès est autorisé ou non. Tu pourras brancher l'appel de cette fonction depuis une macro, un code ou un formulaire... et traiter ainsi l’événement associé.

    jimbolion

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci Jimbolion pour ta réponse.

    Je pense avoir besoin de la fonction Refreshquery car c'est cette dernière qui réalise la recherche. C'est cette fonction qui, en fonction des filtres sélectionnés, affiche les résultats.
    Lorsque je met un point d'arret dans cette fonction, je vois bien les filtres agir sur les résultats à afficher et les arguments mis dans la fonction me semblent cohérents.

    Par contre, en sortie de la fonction, rien ne change: les résultats ne sont pas affichés.

    Merci également pour les postes permettant de gérer les roles utilisateurs !

    Pierre

Discussions similaires

  1. [MySQL] Récupération selection sur alphabet dans moteur de recherche
    Par LiliValerie dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/10/2012, 11h48
  2. Gestion des accents dans moteur de recherche
    Par karpe dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/07/2011, 16h17
  3. Rubriques dans moteur de recherche
    Par dominos dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/01/2011, 13h34
  4. code pour moteur de recherche interne
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 24/01/2011, 12h58
  5. [MySQL] Message d' erreur mysql dans requete de recherche sur la bdd
    Par cuisto44000 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/05/2010, 16h33

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