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 :

UPDATE récalcitrant avec la fonction Min() [AC-2019]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club Avatar de Maglau
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 9
    Points
    9
    Par défaut UPDATE récalcitrant avec la fonction Min()
    Bonjour à tous,

    Je reviens vers vous pour vos bons conseils.

    Je désire récupérer pour chaque client (Table T_Clients) la date de la facture la plus ancienne (Table T_Import_Impayees ).

    J’ai donc édité la requête SR_Import7_Clients_Maj suivante, sur le fichier contenant les factures, et qui récupère correctement la date de facture la plus ancienne
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Import_Impayees.CodeClient, Min(T_Import_Impayees.DateFacture) AS MinDeDateFacture
    FROM T_Import_Impayees
    GROUP BY T_Import_Impayees.CodeClient
    ORDER BY T_Import_Impayees.CodeClient;
    Pour mettre à jour cette date dans le fichier client, j’ai fait la requête suivante qui devait récupérer le résultat de la sous-requête ci-dessus.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE T_Clients INNER JOIN SR_Import7_Clients_Maj ON T_Clients.CodeClient = SR_Import7_Clients_Maj.CodeClient SET T_Clients.DateMaxRetard = SR_Import7_Clients_Maj.MinDeDateFacture ;
    Mais là, j’ai le message d’erreur : L'opération doit utiliser une requête qui peut être mise à jour

    Après des recherches sur Internet, qui n’ont pas éclairé ma lanterne, j’ai tenté de faire, sans sous-requête, de la façon suivante
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE T_Clients INNER JOIN T_Import_Impayees ON T_Clients.CodeClient = T_Import_Impayees.CodeClient SET T_Clients.DateMaxRetard = Min([T_Import_Impayees]![DateFacture]);
    Mais là, j’ai le message d’erreur : Désolé... Votre requête n’inclut pas l’expression << DateMaxRetard >> spécifié en tant que partie d’une fonction d’agrégation.

    J’ai créé toutes ces requêtes en utilisant le mode création de l’éditeur de requête.
    Ce pourrait-il que malgré ce que permet de faire cet éditeur, j’utilise mal les possibilités de la fonction Min() ?

    Merci d’avance pour votre éclairage.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 636
    Points : 14 610
    Points
    14 610
    Par défaut
    bonjour,
    il n'est pas possible dans Access de faire une mise à jour avec une requête (ou une sous-requête) contenant un regroupement, il faut obligatoirement passer par une fonction de domaine DMin (MinDom en français).
    On peut l'écrire comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE T_Clients SET DateMaxRetard = DMin("DateFacture","T_Import_Impayees","CodeClient=" & T_Clients.CodeClient );
    Min() est une fonction de regroupement dans SQL, pas dans un domaine
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Futur Membre du Club Avatar de Maglau
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Bonjour tee_grandbois

    Merci pour l'info. Il va falloir que je me penche sur les fonctions de domaine et de regroupement.

    J'ai copier-coller la requête, mais à l'Affichage j'ai 863 enregistrements avec le champ DateMaxRetard vide.

    A l'Exécution, j'ai le message : Vous allez mettre à jour 863 ligne(s), mais après validation, les champs DateMaxRetard de la table T_Clients sont vides.

    Qu'est-ce qui pourrait ne pas aller ???

    Encore Merci.

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 636
    Points : 14 610
    Points
    14 610
    Par défaut
    que donne l'affichage des données avec cette requête de sélection ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select *.T_Clients, DMin("DateFacture","T_Import_Impayees","CodeClient=" & T_Clients.CodeClient) as DateMin from T_Clients ;
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Futur Membre du Club Avatar de Maglau
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Ça donne :

    Erreur de syntaxe (opérateur absent) dans l'expression << *.T_Clients >>.

    Mais j'ai compris le but et je l'ai modifiée en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_Clients.*, DMin("DateFacture","T_Import_Impayees","CodeClient=" & T_Clients.CodeClient) AS DateMin
    FROM T_Clients;
    Ça a créé une colonne DateMin avec pour valeur #Erreur
    Et si l'on clique sur la toupie à côté de l’entête de colonne, ça donne le message : Type de données incompatible dans l'expression du critère.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 636
    Points : 14 610
    Points
    14 610
    Par défaut
    j'aimerais connaitre la structure des 2 tables.
    Peux-tu envoyer une copie de la base au format ZIP avec les 2 tables vides ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Futur Membre du Club Avatar de Maglau
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Bonjour
    Voici les 2 tables > Database3.zip

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 636
    Points : 14 610
    Points
    14 610
    Par défaut
    bonjour,
    CodeClient est de type Texte, il faut ajouter des apostrophes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_Clients.*, DMin("DateFacture","T_Import_Impayees","CodeClient='" & T_Clients.CodeClient & "'") AS DateMin
    FROM T_Clients;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE T_Clients SET DateMaxRetard = DMin("DateFacture","T_Import_Impayees","CodeClient='" & T_Clients.CodeClient & "'");
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Futur Membre du Club Avatar de Maglau
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup tee_grandbois pour cette leçon.
    Cela marche à la perfection.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/03/2012, 12h01
  2. [XL-2003] Erreur avec la fonction Min dans VBA Excel
    Par Marymimo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/08/2009, 09h08
  3. problème avec la fonction update
    Par gendalf37400 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 16/05/2007, 11h51
  4. PB avec les fonctions update/replace
    Par myers80 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 07/03/2007, 23h35
  5. [SQL] Problème avec la fonction UPDATE
    Par JohanProg dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 16/10/2006, 12h56

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