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

Bases de données Delphi Discussion :

probleme avec une requete sql


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut probleme avec une requete sql
    Salut
    j'utulis ADO avec acces 2003
    jai 2 table la table emprinté a comme champs(nom,date,somme_emprinté');
    et la table rendre a comme champ(nom,date somm_rendu');
    chaque perssonne peut faire plusieur emprinte et aussi plusiseur rendu
    jai volu avec une requete sql afficher le reste des rendu pour chaque perssonne
    sachant que le reste est egal a la somme_emprinte-la somme_rendu
    merci D'avance

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    A la volée

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select emprunt.nom, sum(somme_emprinte- somm_rendu) Reste
    from emprunt
    left join rendre on rendre.nom=emprunt.nom
     
    where ...
     
    group by emprunt.nom
    Cordialement
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  3. #3
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Je ne connais pas Acces 2003 mais certainement devras tu utiliser nvl ou une fonction similaire pour éviter des résultats nul

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select emprunt.nom, sum(Nz(somme_emprinte,0)- Nz(somm_rendu,0)) Reste
    from emprunt
    left join rendre on rendre.nom=emprunt.nom
    group by emprunt.nom

    j'ai renommé la table emprinté en emprunt pour éviter les caractères accentués.

    je pars du principe que ci quelqu'un rend c'est parce qu'il a emprunté mais il pourrait être plus judicieux (bien que plus lent) de prendre comme table maîtresse la tables des "emprunteurs".


    Cordialement
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  4. #4
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    merci
    mais je veux savoir seulement quelle le role du Reste dans la requette

  5. #5
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    C'est pour faire jolie et avoir ainsi un nom parlant pour cette colonne calculée

    Sans doute aurais-je aussi dû ajouter AS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    Select sum(Nz(somme_emprinte,0)- Nz(somm_rendu,0)) AS Reste
    ....
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  6. #6
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Bonjour
    Desolé ca marche pas l'instruction que tu ma donnée
    ce que je veux c la soustraction de c 2 champs le champ emprinte-le champ rendu
    exemple
    la table emprunt
    karim 01/01/2008 200
    karim 02/01/2008 300
    karim 03/01/2008 200
    amine 01/01/2008 500
    amine 02/01/2008 300

    la table rendre
    karim 08/01/2008 100
    karim 09/01/2008 200
    amine 10/01/2008 200

    ce que je veux comme affichage et le reste pour chaque perssonne
    karim 400
    amine 600

    merci

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    Si tu travailles avec Access 2003 et tu as des problèmes de création de requêtes alors je te propose la réalisation de ta requête à partir de l'anglais requête de MSAccess qui est facile d'emploi et assez intuitif.

    Bon courage.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  8. #8
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par kroma23 Voir le message
    ce que je veux comme affichage et le reste pour chaque perssonne
    karim 400
    amine 600
    J'ai bien compris ce que tu veux et c'est ce que la requête devrait te retourner

    parcontre
    Citation Envoyé par kroma23 Voir le message
    Desolé ca marche pas l'instruction que tu ma donnée
    ça manque de détail

    Transmet nous donc ton SQL

    a+
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  9. #9
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Re
    Voila ce que jai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    adoquery1.close;
    adoqquery1.sql.clear;
    adoquery1.sql.add('select emprunt.nom,sum(emprunt.somme_emprunte-rendre.somme_rendu) from emprunt,rendre where emprunt.nom=rendre.nom group by nom');
    adoquery1.open;

  10. #10
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    pour quoi pas ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    adoquery1.close;
    adoqquery1.sql.clear;
    adoquery1.sql.add('select emprunt.nom,sum(emprunt.somme_emprunte) as EMPRUNTE sum(rendre.somme_rendu) AS RENDU from emprunt,rendre where emprunt.nom=rendre.nom group by nom');
    adoquery1.open;
    plus claire, non.

    coté code ça parait logique, faudrait vérifier les données ...
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  11. #11
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Essaie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      adoquery1.close;
      adoqquery1.sql.clear;
      adoquery1.sql.add('select emprunt.nom,
    sum(emprunt.somme_emprunte)-sum(rendre.somme_rendu) 
    from emprunt,rendre 
    where emprunt.nom=rendre.nom 
    group by emprunt.nom');
      adoquery1.open;
    Et quand tu dis "ça ne marche pas" que veux tu dire ?
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  12. #12
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Re
    Yurck je te jure que ce ne marche pas jai fais copie collé pour ta requette
    il me donne un faux resultas

  13. #13
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut La machine a souvent raison
    Citation Envoyé par kroma23 Voir le message
    il me donne un faux resultas
    Je ne connais pas bien acces mais je doute que le résultat soit faux.
    La question est plus probablement fausse.

    Sache que la somme de 10 + 20 + Null est égale à Null

    Je t'avais dis plus tôt d'utiliser NVl soit Nz sous Acces

    Je te propose donc d'analyser ce qui est faux de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    adoquery1.close;
    adoqquery1.sql.clear;
    adoquery1.sql.add('select emprunt.nom,
    sum(Nz(emprunt.somme_emprunte,0)) As Emp,
    sum(Nz(rendre.somme_rendu,0))  As Rend,
    sum(Nz(emprunt.somme_emprunte,0))-sum(Nz(rendre.somme_rendu,0))  As Reste
    from emprunt,rendre 
    where emprunt.nom=rendre.nom 
    and emprunt.nom=''amine''
    
    group by emprunt.nom
    order by emprunt.nom');
     adoquery1.open;
    En quoi ton résultat est - il faux ???

    Bonne soirée
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  14. #14
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Bonjour
    Yurck voila le message d'erreur
    fonction Nz non definie dans l'expression

  15. #15
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    dans l'état actuelle des chose il ne peut pas faire une requette direct

    le problème est que ses remboursement ne sont pas affecter a un emprunt
    mais a une personne
    donc on est dans une configuration n->n est non 1->n

    pour palier a ce probleme tu as deux solution
    soit tu passe par une requette intermediaire
    qui te regroupe tout tes enregistrements

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT EMPRUNTER.NOM as NOM, Sum(EMPRUNTER.SOMME) as SOMME
    FROM EMPRUNTER
    GROUP BY EMPRUNTER.NOM
    UNION SELECT RENDRE.NOM as NOM,Sum(RENDRE.SOMME)*-1 as SOMME
    FROM RENDRE
    GROUP BY RENDRE.NOM;
    et ensuite une simple requette sur cette element temporaire

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCTROW TMPRESTE.NOM, Sum(TMPRESTE.SOMME) AS [Somme De SOMME]
    FROM TMPRESTE
    GROUP BY TMPRESTE.NOM;

    soit tu ajoute un champs cle a ta table de remboursement faisant reference
    par exemple au champs unique de ton emprunt

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  16. #16
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Bonjour
    Anapurna jai fais ce que tu ma dit le probleme que ya pas d'erreur mais
    aucun affichage sur le dbgrid ca me semble que la table tmpreste est vide.

  17. #17
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    TMPRESTE correspond a quoi pour toi
    Une table ou une requette
    si c'est une table tu la rempli comment ?

    @+ phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  18. #18
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par kroma23 Voir le message
    aucun affichage sur le dbgrid ca me semble que la table tmpreste est vide.
    Pour savoir est ce que la requete est fausse, il faut la tester avec Access.
    Pour le faire , Creer une nouvelle requete en mode creation, après d'ajouter les 2 tables, cliquez sur Requete de barre de Menu.

  19. #19
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Bonjour
    Anapurna tmpreste c une table qui a comme champs(nom,somme)
    elle sera remplie apres ta premier requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add('SELECT EMPRUNTER.NOM as NOM, Sum(EMPRUNTER.SOMME) as SOMME
    FROM EMPRUNTER
    GROUP BY EMPRUNTER.NOM
    UNION SELECT RENDRE.NOM as NOM,Sum(RENDRE.SOMME)*-1 as SOMME
    FROM RENDRE
    GROUP BY RENDRE.NOM');
    adoquery1.open;
    et finalement le resulta de cette requette sera remplie dans la table tmpreste
    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
     
    //selectionner la table tmpreste
    adoquery2.close;
    adoquery2.sql.clear;
    adoquery2.sql.add('select * from tmpreste');
    adoquery2.open;
    //supprimé le contenu de la table tmpreste
    adoquery2.close;
    adoquery2.sql.clear;
    adoquery2.sql.add('delete * from tmpreste');
    adoquery2.open;
    //remplire la table tmpreste
    adoquery1.first;
    while not adoquery1.eof do
    begin
    adoquery2.insert;
    adoquery2.fieldbyname('nom').value:=adoquery1.fieldbyname('nom').value;
    adoquery2.fieldbyname('somme').value:=adoquery1.fieldbyname('somme').value('somme').value;
    adoquery2.post;
    adoquery1.next;
    end;
    //affichage de la table tmpreste
    adoquery2.close;
    adoquery2.sql.clear;
    adoquery2.sql.add('select nom,sum(somme) from tmpreste group by nom');
    adoquery2.open;
    et comme ca mon probleme et resolu alors
    Merci Yurck et Anapurna pour votre aide

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

Discussions similaires

  1. [XL-2010] Probleme avec une requete SQL
    Par efo007 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 08/04/2014, 08h30
  2. Probleme avec une requete sql
    Par kraven30 dans le forum Requêtes
    Réponses: 8
    Dernier message: 01/02/2011, 16h47
  3. probleme avec une requete SQL
    Par univermina dans le forum ASP
    Réponses: 20
    Dernier message: 07/06/2009, 22h24
  4. Probleme avec une requete sql dans VB6 pour un champ date
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2009, 08h31

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