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

Access Discussion :

Effectuer un tri dans un sous-formulaire suite à une recherche (utilisation de ORDER BY) [AC-2007]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Effectuer un tri dans un sous-formulaire suite à une recherche (utilisation de ORDER BY)
    Bonjour à tous,

    Avant de commencer, je voudrais vous dire que j'ai fais des recherches sur le forum, entre autres, avant de poster ici, mais que malheureusement elles se sont avérées infructueuses.

    Je suis actuellement en train de créer un formulaire (cf. image ci dessous) permettant de rechercher des entrées au sein d'une table appelé film qui à plusieurs champ (film_clef, film_nom, film_format_video, film_taille, film_emplacement).

    Nom : formulaire_recherche.jpg
Affichages : 113
Taille : 330,4 Ko

    Malheureusement, tout ne marche pas comme je l'aurais souhaité. Notamment au niveau du sous formulaire recherche_film_sous-formulaire qui, lorsque je fait une recherche avec la zone de texte TexteRecherche, ne m'affiche plus les résultats par ordre alphabétique mais par ordre d'ajout dans la table film. ci-dessous le code de la zone de texte TexteRecherche :

    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
    Private Sub TexteRecherche_Change()
        Dim QRY As String
            QRY = "SELECT  * FROM film " _
                  & "WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*"";"
     
        If Len(TexteRecherche.Text) > 0 Then
            Me.[recherche_film_sous-formulaire].Form.RecordSource = QRY
            Me.ListeFormatVideo.RowSource = "SELECT ""-- Tous --"" FROM [film] UNION SELECT [film_format_video] FROM [film] WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*"" GROUP BY [film_format_video]"
            Me.ListeEmplacement.RowSource = "SELECT ""-- Tous --"" FROM [film] UNION SELECT [film_emplacement] FROM [film] WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*"" GROUP BY [film_emplacement]"
        Else
            Me.[recherche_film_sous-formulaire].Form.RecordSource = "SELECT [film_clef], [film_nom], [film_format_video], [film_taille], [film_emplacement] FROM [film] ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]"
            Me.ListeFormatVideo.RowSource = "SELECT ""-- Tous --"" FROM [film] UNION SELECT [film_format_video] FROM [film] GROUP BY [film_format_video]"
            Me.ListeEmplacement.RowSource = "SELECT ""-- Tous --"" FROM [film] UNION SELECT [film_emplacement] FROM [film] GROUP BY [film_emplacement]"
        End If
     
    End Sub
    Pour que le tri ce fasse, comme sur la ligne L11 du code ci-dessus, je me suis dis qu'il fallait utiliser la fonction ORDER BY au niveau de la définition de la variable QRY (voir code ci-dessous, L3 & L4)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            QRY = "SELECT  * FROM film " _
                  & "WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*"";" _
                  & "ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]"
    Ou alors appliquer directement le tri à la ligne L7 (cf. ci-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Me.[recherche_film_sous-formulaire].Form.RecordSource = QRY ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]
    Malheureusement pour moi, aucune des deux solutions ne marche ... et, n’étant ni développeur de métier, ni même programmateur amateur, je bloque totalement sur la solution à adopter pour faire en sorte que cela marche.

    Alors ... un grand merci pour ceux (et celles bien sur) qui aurons des réponses à m'apporter

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,

    Petit tuyau :
    Lorsque tu crées une requête en VBA la première chose à faire est tester son résultat dans un objet requête. Il y a un tuto sur le débogage de ce type de montage.

    Concernant ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "SELECT  * FROM film " _
                  & "WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*"";" _
                  & "ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]"
    On aperçoit à la fin de la ligne 2 :
    Tu indiques explicitement, par ce caractère " ; " que c'est la fin de l'instruction SQL, si tu places le contenu de la string QRY, après son évaluation, dans un objet requête et que affiche son résultat tu obtiendras un message d'erreur du type "caractères trouvé après la fin de l'instruction" ou un message s'en approchant.

    Concernant la deuxième instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.[recherche_film_sous-formulaire].Form.RecordSource = QRY ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]
    ça ne veut strictement rien dire :
    1) recordsource attent une string : ici ce n'est pas une string valide VBA (absence de délimiteur " ")
    2) Cette string doit contenir une source valide. Donc soit le nom d'une requête ou d'une table, soit une instruction SQL valide (SELECT ... FROM...), soit encore une variable String contenant elle-même l'un des 2 contenus précédemment cité.

    Eventuellement tu aurais pu faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.[recherche_film_sous-formulaire].Form.RecordSource = QRY & " ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]"
    Mais là encore la ";" contenu à la fin de QRY t'en empêche.

    Consulte le tuto sur le débogage de requête en VBA. Il te permettra d'obtenir plus d'autonomie sur ce type de problème.

    Cordialement,
    [EDIT] Tu peux supprimer simplement ce caractère.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Merci loufab pour les infos,

    en effet, j'ai bien un message d'erreur du type "caractères trouvé après la fin de l'instruction", du coup je vais chercher le tuto et y jeter un œil.

    je vous tiens au jus ...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bon au final j'ai essayé plusieurs choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "SELECT  * FROM film " _
                  & "WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*""" _
                  & "ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]";"
    résultat : un echec (Texte46 = TexteRecherche dans l'image jointe) Nom : 1èr essai.jpg
Affichages : 101
Taille : 101,0 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "SELECT  * FROM film ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]" _
                  & "WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*"";"
    résultat : encore un echec ... Nom : 2ème essai.jpg
Affichages : 137
Taille : 115,1 Ko

    J'ai lu attentivement tout ce qui concerne le débogage du VBA, ainsi que les commandes avancées dans du code SQL (et plus particulièrement l'association SELECT vs. ORDER BY) ... Et malgré tout cela, je suis complètement en manque d'inspiration ...

    So Help Me Please !!!

  5. #5
    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
    Swiip38,

    En utilisant ce tuto suggéré par Loufab, cela devrait te permettre de corriger tes erreurs toi même : http://cafeine.developpez.com/access...el/debugprint/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "SELECT  * FROM film " _
                  & " WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*""" _
                  & " ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement];"
    La terminaison de ta requête ainsi que l’absence d'espace devant le where et le order by

    select * froms clientswhere clients.nom="TOTO"ORDER By ne peut pas fonctionner. Il est impératif de pouvoir contrôler le résultat (ou l'état) d'un variable avant de l'utiliser plus loin dans ton code.

    Même souci ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "SELECT  * FROM film ORDER BY [film_nom], [film_format_video], [film_taille], [film_emplacement]" _
                  & " WHERE film_nom Like ""*" & Replace(TexteRecherche.Text, """", """""") & "*"";"
    JimBoLion

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Salut jimbolion,

    J'avais pourtant insisté sur ce passage du tuto mais, de toute évidence, j'avais pas vu le manque d'espace ...

    Alors un grand merci pour ta réponse, et je promets de faire attention aux détails les prochaines fois !!!

    Encore merci

  7. #7
    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
    Swiip38,

    Pas de soucis, nous sommes là pour t'aider. Pour ma part je visualise plus facilement le contenu d'une chaîne que son interprétation dans le code.
    Donc l'affichage du résultat ainsi que la partie code (nous n'avons pas connaissance des informations contenues dans un formulaire, une variable...).

    En tout cas bon courage pour la suite

    JimBoLion

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/04/2014, 15h54
  2. Réponses: 1
    Dernier message: 23/06/2009, 11h59
  3. Réponses: 7
    Dernier message: 20/06/2008, 16h19
  4. tri dans un sous-formulaire
    Par ROUSA1 dans le forum IHM
    Réponses: 2
    Dernier message: 13/08/2007, 23h16
  5. Réponses: 6
    Dernier message: 21/08/2006, 00h06

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