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

Requêtes et SQL. Discussion :

Problème sur SELECT MAX [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 78
    Points : 53
    Points
    53
    Par défaut Problème sur SELECT MAX
    Bonjour à tous,

    J'utilise le code suivant afin de récupérer la valeur maxi d'un compteur horaire correspondant à un engin sélectionné dans une liste déroulante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Compteur horaire Engin (Valeur MAX dans la table Entretien Périodique)
    sql = "SELECT MAX([Compteur horaire]) FROM Table_Engins_Entretien_Periodique WHERE [Désignation engin] = '" & Me.lst_Engin.Value & "' "
    Set RS = CurrentDb.OpenRecordset(sql)
    If Not RS.EOF Then
        Me.txt_Fiche_Heure_Engin.Value = RS.Fields("[Compteur horaire]").Value
    End If
    Ce code a un comportement étrange...

    La valeur retournée dans Me.txt_Fiche_Heure_Engin.Value est la désignation de l'engin (alors que je veux le compteur horaire) et incidemment une erreur est retournée "Elément non trouvé dans cette collection", ce qui est évident vu que la désignation de l'engin n'est pas présente dans compteur horaire...

    J'ai du me tromper dans ma requête SELECT MAX, mais je ne vois pas où
    (Note: Compteur horaire est un champ numérique)

    Si quelqu'un a une idée, ce serait sympa. Merci

    Bonne journée

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    salut,
    en ajoutant un alias à ton champ, tu devrais y arriver aisément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "SELECT MAX([Compteur horaire]) As [Compteur horaire] FROM Table_Engins_Entretien_Periodique WHERE [Désignation engin] = '" & Me.lst_Engin.Value & "' "
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour

    Soit vous aliaser le MAX et le reprennez dans la collection Fields, soit vous utilisez la position du champ dans le recordset :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.txt_Fiche_Heure_Engin.Value = RS.Fields(0).Value

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 78
    Points : 53
    Points
    53
    Par défaut
    Merci à tous pour vos réponses,

    Me.txt_Fiche_Heure_Engin.Value = RS.Fields(0).Value
    J'avais déjà essayé sans plus de succès...

    Et j'ajoute un alias à [Compteur horaire], j'ai une erreur circulaire

    Je colle le code complet de ma procédure dès fois que cela puisse vous aider:

    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
    Private Sub lst_Engin_AfterUpdate()
    Me.txt_Nom_Engin.Value = Me.lst_Engin.Value
    Me.img_No_Image.Visible = False
     
    Dim RS As DAO.Recordset
    sql = "SELECT * FROM Table_Engins WHERE [Désignation engin] = '" & Me.lst_Engin.Value & "' "
    Set RS = CurrentDb.OpenRecordset(sql)
    If Not RS.EOF Then
        Me.txt_Fiche_Nom_Engin.Value = RS.Fields("[Désignation engin]").Value
        Me.txt_Fiche_N°Serie.Value = RS.Fields("[N° de série]").Value
        Me.txt_Fiche_N°Parc.Value = RS.Fields("[N° de parc]").Value
        Me.txt_Fiche_Année.Value = RS.Fields("[Année de mise en service]").Value
        Me.txt_Fiche_MiseEnRoute.Value = RS.Fields("[Date de mise en route]").Value
        If IsNull(RS.Fields("Photo").Value) Then
            Me.img_Engin.Picture = ""
            Me.img_No_Image.Visible = True
        Else
            Me.img_Engin.Picture = RS.Fields("Photo").Value
        End If
     
    End If
    RS.Close
     
    ' Compteur horaire Engin (Valeur MAX dans la table Entretien Périodique)
    sql = "SELECT MAX([Compteur horaire]) FROM Table_Engins_Entretien_Periodique WHERE [Désignation engin] = '" & Me.lst_Engin.Value & "' "
    Set RS = CurrentDb.OpenRecordset(sql)
    If Not RS.EOF Then
        Me.txt_Fiche_Heure_Engin.Value = RS.Fields([Compteur horaire]).Value
    End If
    RS.Close
     
    End Sub
    Merci pour votre patience.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 78
    Points : 53
    Points
    53
    Par défaut
    En fait, c'est parfait

    J'ai bien une erreur circulaire si j'atoute un alias

    Par contre si je suis le conseil de Tofalu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.txt_Fiche_Heure_Engin.Value = RS.Fields(0).Value
    Cela fonctionne. J'avais mis RS.Fields(4) parce que je croyais que cela correspondait à la 4ème colonne de ma table. Et bien visiblement non

    Si quelqu'un peu m'expliquer ce RS.Fields ce serait sympa.

    Merci encore pour votre aide.

    Bonne soirée

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

Discussions similaires

  1. Problème sur select
    Par sdisp+ dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/01/2013, 09h51
  2. Problème sur Select Case When
    Par parilla77 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 06/04/2012, 16h11
  3. problème sur selection dans un DataGridView
    Par gueulederack dans le forum VB.NET
    Réponses: 16
    Dernier message: 10/01/2012, 09h46
  4. Problème sur select liste déroulante
    Par Vanessa48 dans le forum Langage
    Réponses: 9
    Dernier message: 20/10/2011, 17h02
  5. Problème avec SELECT MAX
    Par DDMALO dans le forum Langage SQL
    Réponses: 27
    Dernier message: 01/10/2008, 18h59

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