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

IHM Discussion :

Problème d'actualisation avec filtration en utilisant un champ libre


Sujet :

IHM

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut Problème d'actualisation avec filtration en utilisant un champ libre
    Bonjour, j'ai un formulaire qui me permet de rechercher des pièces dans ma base. La recherche s'affiche dans une zone de liste, et la quantité d'information est réduite en fonction du filtre effectué.

    J'ai également mis un compteur, afin de savoir combien d'articles correspondent à ma recherche filtrée, par rapport au nombre d'article total.

    En plus des mes filtres principaux, qui sont enfait des comboBox, j'ai mis un champs libre, ou les utilisateurs peuvent marquer une référence, et voir la zone de liste diminuer jusqu'à obtenir la référence qu'ils recherche.

    Voici le code de ce champ libre:

    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
     
    Private Sub txtRéférence_Change()
    Dim valeur, debutSQL, finSQL, sql  As String
    Dim zoneListe As ListBox
     
     
       If Len(txtRéférence.Text) > 0 Then
     
    sql = "SELECT tbl_Référence.ID_Référence, tbl_Référence.CmdeAuto, tbl_Désignation.Désignation, tbl_Référence.Référence, tbl_Référence.StockActuel, tbl_Marques.Marque, tbl_Lignes.Designation as Ligne ,tbl_Machines.Designation as Machine,  tbl_Lignes.Id_Ligne, tbl_Machines.Id_Machine, tbl_Désignation.ID_Désignation, tbl_Marques.ID_Marque FROM (tbl_Désignation INNER JOIN (tbl_Marques INNER JOIN tbl_Référence ON tbl_Marques.[ID_Marque] = tbl_Référence.[ID_Marque]) ON tbl_Désignation.[ID_Désignation] = tbl_Référence.[ID_Désignation]) INNER JOIN ((tbl_Lignes INNER JOIN tbl_Machines ON tbl_Lignes.[Id_Ligne] = tbl_Machines.[Id_Ligne]) INNER JOIN tbl_Nomenclature ON tbl_Machines.Id_Machine = tbl_Nomenclature.ID_Machine) ON tbl_Référence.ID_Référence = tbl_Nomenclature.ID_Référence WHERE (((tbl_Référence.ID_Référence)<>0)) and tbl_Référence.Référence like '" & txtRéférence.Text & "*';"
     
     
     
            Me.lstResults.RowSource = sql
     
             Me.cmbRechLigne.Value = Null
             Me.cmdRechCat.Value = Null
             Me.cmbRechMachine.Value = Null
             Me.ImgLigne.Picture = ""
             Me.ImgMachine.Picture = ""
        Else
             RefreshQuery
        End If
     
    End Sub
    J'ai ensuite un refrshQuery, qui me permet de faire la filtration en fonction du choix dans les comboBox, et du choix dans le champ libre. Mais dans mon RefreshQuery, je ne sais pas comment exprimer la partie du champ libre?

    Voici le code de mon refreshQuery, j'ai mis en rouge le code qui me permet d'adapter ma liste par exemple en fonction de la ligne de production choisie:

    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
    Public Sub RefreshQuery()
    Dim sql As String, sqlCompteur As String
    Dim SQLWhere As String
    
    Dim oRst As DAO.Recordset
    Dim odb As DAO.Database
    Set odb = CurrentDb
    
    sql = "SELECT tbl_Référence.ID_Référence, IIF(tbl_Référence.CmdeAuto =true,""oui"",""non"") as [Cmde Auto], tbl_Désignation.Désignation, tbl_Référence.Référence, tbl_Référence.StockActuel as [Stock Actuel], tbl_Marques.Marque, tbl_Lignes.Designation as [Ligne de production],tbl_Machines.Designation as [Machine],  tbl_Lignes.Id_Ligne, tbl_Machines.Id_Machine, tbl_Désignation.ID_Désignation, tbl_Marques.ID_Marque FROM (tbl_Désignation INNER JOIN (tbl_Marques INNER JOIN tbl_Référence ON tbl_Marques.[ID_Marque] = tbl_Référence.[ID_Marque]) ON tbl_Désignation.[ID_Désignation] = tbl_Référence.[ID_Désignation]) INNER JOIN ((tbl_Lignes INNER JOIN tbl_Machines ON tbl_Lignes.[Id_Ligne] = tbl_Machines.[Id_Ligne]) INNER JOIN tbl_Nomenclature ON tbl_Machines.Id_Machine = tbl_Nomenclature.ID_Machine) ON tbl_Référence.ID_Référence = tbl_Nomenclature.ID_Référence WHERE tbl_Référence.ID_Référence<>0"
    
    If Not IsNull(Me.cmbRechLigne) Then
        sql = sql & " and tbl_Machines.Id_Ligne =  " & Me.cmbRechLigne & " "
    End If
    
    
    If Me.cmbRechMachine <> "" Then
        sql = sql & " and tbl_Nomenclature.ID_Machine = " & Me.cmbRechMachine & " "
    End If
    
    If Me.cmdRechCat <> "" Then
        sql = sql & " and tbl_Désignation.ID_Catégorie =  " & Me.cmdRechCat & "  "
    End If
    
    
    sqlCompteur = "select count(*) from (" & sql & ");"
    Set oRst = odb.OpenRecordset(sqlCompteur, dbOpenDynaset)
    Me.txtNombreLigneCritéres.Caption = oRst.Fields(0).Value
    
    sqlCompteur = "select count(*) from( select * from tbl_Référence);"
    Set oRst = odb.OpenRecordset(sqlCompteur, dbOpenDynaset)
    Me.txtNombreLignetotal.Caption = oRst.Fields(0).Value
    
    
    SQLWhere = Trim(Right(sql, Len(sql) - InStr(sql, "Where ") - Len("Where ") + 1))
    
    sql = sql & ";"
    
    Me.lstResults.RowSource = sql
    Me.lstResults.Requery
    
    End Sub
    Se qui se passe actuelement, c'est que sa me filtre bien en fonction de se que les utilisateurs inscrivent dans le champ libre, mais le compteur ne fonctionne pas...

    Merci

  2. #2
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    J'avais essayé sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'If Not IsNull(me.txtréférence.Text) Then
     
     'sql = sql & "and tbl_Référence.Référence like '" & me.txtréférence.Text & "*' "
     
    'End If

  3. #3
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Personne ne sait? ou mon message n'est pas clair??? Dites moi!

  4. #4
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Je réexplique en 2 mot.

    J'ai une requete, qui m'affiche des données dans une zone de liste. Ces données, peuvent êtres filtrées, soit par des combobox, soit par un champs nomé référence, qui est en écriture libre. Voila le code sur évenement changement de ce champ:

    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
    Private Sub txtRéférence_Change()
    Dim valeur, debutSQL, finSQL, sql  As String
    Dim zoneListe As ListBox
     
     
       If Len(txtRéférence.Text) > 0 Then
     
    sql = "SELECT tbl_Référence.ID_Référence, IIF(tbl_Référence.CmdeAuto =true,""oui"",""non"") as [Cmde Auto], tbl_Désignation.Désignation, tbl_Référence.Référence, tbl_Référence.StockActuel as [Stock Actuel], tbl_Marques.Marque, tbl_Lignes.Designation as [Ligne] ,tbl_Machines.Designation as [Machine],  tbl_Lignes.Id_Ligne, tbl_Machines.Id_Machine, tbl_Désignation.ID_Désignation, tbl_Marques.ID_Marque FROM (tbl_Désignation INNER JOIN (tbl_Marques INNER JOIN tbl_Référence ON tbl_Marques.[ID_Marque] = tbl_Référence.[ID_Marque]) ON tbl_Désignation.[ID_Désignation] = tbl_Référence.[ID_Désignation]) INNER JOIN ((tbl_Lignes INNER JOIN tbl_Machines ON tbl_Lignes.[Id_Ligne] = tbl_Machines.[Id_Ligne]) INNER JOIN tbl_Nomenclature ON tbl_Machines.Id_Machine = tbl_Nomenclature.ID_Machine) ON tbl_Référence.ID_Référence = tbl_Nomenclature.ID_Référence WHERE (((tbl_Référence.ID_Référence)<>0)) and tbl_Référence.Référence like '" & txtRéférence.Text & "*';"
     
     
     
            Me.lstResults.RowSource = sql
     
             Me.cmbRechLigne.Value = Null
             Me.cmdRechCat.Value = Null
             Me.cmbRechMachine.Value = Null
             Me.ImgLigne.Picture = ""
             Me.ImgMachine.Picture = ""
        Else
             RefreshQuery
        End If
     
     
    End Sub
    Ce code me permet bien de filtrer les données, en fonction de ce qui est écrit dans le champ libre par les utilisateurs, mais le compteur que j'ai intégré qui permet de compter le nombre d'article correspondant au filtre par rapport au nombre total d'article, ne fonctionne pas.

    Le code du refreshQuery de la zone de liste, je l'ai fourni dans mon premier message.

    Merci pour votre aide!

Discussions similaires

  1. [Débutant] Problème d'actualisation avec des Contentcontrol imbriqués
    Par 1FiniTy dans le forum C#
    Réponses: 0
    Dernier message: 11/10/2011, 14h07
  2. problème d'actualisation avec les frameset
    Par intissar_g dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/08/2007, 14h18
  3. [HSQLDB] problème avec un SELECT utilisant LIMIT
    Par don_quichotte dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 12/04/2007, 23h08
  4. problème d'actualisation avec la pagination
    Par momov dans le forum ASP
    Réponses: 10
    Dernier message: 03/07/2006, 14h33
  5. Réponses: 4
    Dernier message: 11/04/2006, 09h07

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