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 :

Requête SQL SELECT ORDER BY [AC-2016]


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2022
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 24
    Points : 26
    Points
    26
    Par défaut Requête SQL SELECT ORDER BY
    Bonsoir,

    Je reviens à nouveau pour un coup de pouce. Je bloque actuellement dans la réalisation d'une requête SQL visant à extraire la dernière ligne (ligne la plus récente) d'une table selon un critère (id de panne).

    Voici le code que j'ai réalisé en me basant sur l'aide précédente que j'ai obtenue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim db As DAO.Database: Set db = CurrentDb
    Dim strSQL As String, strTamp As String   
    strTamp = Me.Liste27.Value   
    strSQL = "SELECT *  FROM Historique_Etat ORDER BY Date_Consultation , DESC LIMIT 1 Where Id_panne='" & strTamp & "';"  
    db.Execute strSQL, dbFailOnError
    Set db = Nothing
    Ici, concrètement, je cherche à extraire les données d'une ligne correspondant à l'état de traitement d'une panne se trouvant dans la table Historique_Etat. Une des données est la date de consultation de la panne intitulée Date_Consultation.
    strTamp est mon critère (filtre) correspondant à la panne sélectionnée dans la zone de liste intitulée Liste27.
    Je souhaite qu'après sélection de l'id panne, filtrer les lignes en rapport avec cet id, puis obtenir les données liées à la ligne la plus réçente.

    L'exécution de la requête ne donne rien. Une fenêtre apparaît indiquant une erreur de syntaxe de ORDER BY.

    Si vous avez une idée d'amélioration je suis preneur.
    En vous remerciant par avance,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Les différentes clauses de la requête ne sont pas dans le bon ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select... 
    From... 
    Where... 
    Group By... 
    Order By...
    Pour le Limit j'ai un doute, donc je te laisse chercher

    Tatayo

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2022
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    Le problème demeure visiblement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strSQL = "SELECT *  FROM Historique_Etat Where Id_panne='" & strTamp & "' ORDER BY Date_Consultation;"
    db.Execute strSQL, dbFailOnError
    Il surligne en jaune la dernière ligne, commençant par db.Execute...
    J'ai simplifié la requête pour limiter les risques d'erreurs en enlevant le DESC et le LIMITE.

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour Jeamgja,

    Il y a plusieurs erreurs dans votre code. La première erreur est qu'on ne peut exécuter une requête "Select". Il faut que ce soit une requête action, comme "UpDate", "Insert" etc... Il faut se servir d'un "RecordSet" pour parcourir les données d'un "Select".

    Votre requête devrait être composé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT Top 1 Historique_Eta.* FROM Historique_Etat  Where Id_panne=" & Chr(34) & strTamp & Chr(34) & " ORDER BY Date_Consultation DESC"
    Et tant qu'à y être j'ai corrigé la clause "Where" en tenant compte de la remarque de binarygirl au sujet des apostrophes pour le champ texte, c'est la raison des "Chr(34)". Maintenant si vous voulez récupérer le résultat il faut faire comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim db As DAO.Database: Set db = CurrentDb
        Dim rst as DAO.Recordset
        Dim strSQL As String, strTamp As String
     
        strTamp = Me.Liste27.Value
        strSQL = "SELECT Top 1 Historique_Eta.* FROM Historique_Etat  Where Id_panne=" & Chr(34) & strTamp & Chr(34) & " ORDER BY Date_Consultation DESC"
        Set rst = db.OpenRecordSet(strSQL, 4, 512)
        MsgBox rst("Id_de_la_Panne")
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    Je ne connais pas le nom de vos champs mais vous n'avez qu'à modifier: "Id_de_la_Panne" par le nom du champ désiré. Ensuite vous pouvez le mettre dans une variable pour l'utiliser.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2022
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 24
    Points : 26
    Points
    26
    Par défaut
    Bonsoir,

    Et bien Robert, visiblement vous avez encore trouvé la solution... cela fonctionne et j'ai testé en remplaçant le contenu du msgbox par le champ de mon choix et le résultat escompté est bien là. Merci.

    Bonne soirée à vous

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

Discussions similaires

  1. Requête SQL + Select NULL
    Par Imad_ing dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/08/2008, 09h02
  2. Ma requête SQL SELECT ne passe pas dans next()
    Par Somato dans le forum Bases de données
    Réponses: 17
    Dernier message: 02/06/2008, 15h45
  3. Enregistrer une requête SQL SELECT sous VB Express
    Par Invité dans le forum VB.NET
    Réponses: 6
    Dernier message: 29/01/2008, 09h04
  4. [Requête/SQL]selection toutes colonnes sauf une
    Par alcabk dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/04/2007, 09h01
  5. problème sous-requête SQL et order by
    Par aguest dans le forum Requêtes
    Réponses: 10
    Dernier message: 26/12/2005, 23h57

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