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 :

Fonction dans une requête


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Par défaut Fonction dans une requête
    Bonjour,
    J'ai un soucis dans cette requêtes SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSQL = "SELECT facture.num_facture, facture.suivi, facture.num_devis, facture.date_facture, COLLABORATEUR.ref as Créateur, clients.nomEntreprise as nom_client, facture.nom_affaire, change_ttc(facture.num_facture) as Mtt_TTC, facture.date_regle, facture.montant_regle, facture.solde, devis.memo " & _
    "FROM COLLABORATEUR INNER JOIN (clients INNER JOIN (Devis INNER JOIN FACTURE ON Devis.num_devis = FACTURE.num_devis) ON clients.num_client = FACTURE.num_client) ON COLLABORATEUR.num_collaborateur = FACTURE.num_collaborateur " & _
    "WHERE facture.type_saisie=1 AND facture.etat_litige = false AND facture.etat_perdu = false AND facture.etat_RG = false AND facture.num_facture LIKE "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & LstSocietes.ItemData(Var1) & ","
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & " AND ( Facture.num_collaborateur = 0 ) "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & " AND ( Devis.num_collaborateur = " & lstCollab.ItemData(Var1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = strSQL & "ORDER BY Mtt_TTC DESC,num_facture DESC;"
    Je l'ai beaucoup simplifiée, il y a en fait beaucoup de possibilités de tri par exemple, mais c'est celui-là qui pose problème : le tri sur Mtt_TTC qui est le résultat d'une fonction qui retourne le montant TTC en fonction du numéro de facture.

    Le soucis c'est que quand j'exécute cette requête, Access me demande 2 fois la valeur de Mtt_TTC et après le tri n'est pas fait. J'ai remarqué (grâce à un des autres tris) que ce champ possède au moins une valeur nulle. Est-ce que c'est à l'origine du problème ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Par défaut
    Bonsoir,
    Citation Envoyé par Kalseln
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "WHERE facture.type_saisie=1 AND facture.etat_litige = false 
    AND facture.etat_perdu = false AND facture.etat_RG = false 
    AND facture.num_facture LIKE "
    Je m'interroge sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND facture.num_facture LIKE
    Comme quoi? Comme qui? D'autre part il peut arriver qu'Access n'ayant pas le champ [num_facture] à jour le "cherche". Dans cette hypothèse pour le vérifier, voir y remédier il faut faire le trie sur le champ calculé dans une seconde requête.

    Cordialement.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Par défaut
    facture.num_facture LIKE LstSocietes.ItemData(Var1) & ","

    C'est la suite du code (voir le 2ème code que j'ai posté) qui permet de choisir les factures selon la (les) société(s) choisie(s) (d'après un système d'initiales). Cette requête est construite suivant des hypothèses de base et donc beaucoup de conditions (est-ce une facture ? un devis ? quel(s) collaborateur(s) doit-on prendre en considération ? doit-on faire le tri sur le n° de facture/devis ? ou sur le nom du client ? etc.) qui sont renseignées dans un formulaire, d'où des "strSQL =" à répétition.

    Je n'ai mis ici que la partie qui pose problème, celle que j'essaie de rajouter : avant il n'y avait pas de possibilité de tri sur le montant TTC mais tout fonctionnait très bien.

    Je me demandais si c'était parce qu'il s'agit d'un champ calculé par une fonction ou si c'est plutôt à cause de champ(s) vide(s).

    Pour résumer, et en plus clair, ma requête peut se simplifier à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT change_ttc(facture.num_facture) as Mtt_TTC
    FROM facture
    ORDER BY Mtt_TTC DESC;
    Et comme je l'ai dit :
    - change_ttc est une fonction qui retourne le montant TTC d'une facture
    - lors de l'exécution, Access me demande 2 fois la valeur de Mtt_TTC, ça fait désordre et du coup ça ne fonctionne pas.

    J'ai maintenant fait en sorte qu'il n'y ait plus de valeur vide, sans que cela change quelque chose.

Discussions similaires

  1. Fonction dans une requête
    Par yoyodepornic dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 16/09/2008, 19h27
  2. Fonction dans une requête
    Par yoyodepornic dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/10/2007, 19h56
  3. Appel de fonction dans une requête
    Par ced dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/04/2007, 10h50
  4. intégrer une fonction dans une requête
    Par badboys206s16 dans le forum ASP
    Réponses: 16
    Dernier message: 10/07/2006, 14h02
  5. Réponses: 7
    Dernier message: 10/09/2005, 16h49

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