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 :

SQL Local (Firedac FDLocalSQL) et agrégats


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 660
    Billets dans le blog
    65
    Par défaut SQL Local (Firedac FDLocalSQL) et agrégats
    Bonjour,

    Jusqu'à présent en FDLocalSQL je me contentais de joindre deux tables de base de données différentes et ce avec succès.
    J'ai voulu obtenir un résumé (montant total de factures) d'une requête plutôt complexe. J'ai d'abord songé à utiliser un champ agrégat créé dans la liste des champs mais je n'obtenais rien (c'était aussi une première ratée pour moi) puis j'ai testé avec le Local SQL. Pour moi il s'agissait d'une requête simple SELECT COUNT(*) NUM, SUM(SOLDE) TOTAL FROM FDQFacturesQuelle ne fut pas ma surprise d'obtenir une valeur pour NUM mais un zéro pointé pour TOTAL !

    Bien sûr je peux passer par des moyens plus "classiques" (une boucle while not EOF) pour obtenir le résultat souhaité mais ...

    La question est donc double :
    - Puisque, apparemment, mon problème d'agrégat est lié quelqu'un a déjà utilisé cette technique ?
    - Êtes-vous "tombé" sur ce genre de requête locale sans problème ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 941
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 941
    Par défaut
    J'utilise sans problème des agrégats en LocalSQL.

    Mais je constate une différence de comportement avec champs guillemetés :
    SUM(SOLDE) ou SUM(`SOLDE`) : une erreur est générée si le champ n'existe pas (normal).
    SUM("SOLDE") : renvoi zéro si le champ n'existe pas !

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 660
    Billets dans le blog
    65
    Par défaut
    Bonsoir,

    j'ai contourné le problème mais je me pose toujours la question, pourquoi cela ne fonctionne pas le seul doute que je puisse émettre est que la colonne SOLDE est une colonne calculée dans la requête initiale.

  4. #4
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 543
    Billets dans le blog
    10
    Par défaut
    Lorsqu'il y a une fonction d'agrégation comme "sum" peut être faut il ajouter "group by"

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 660
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Merci mais non, je parle là des "champs" fkAggregate (champ pour distinguer de colonne de la table) agrégat le "SUM" est dans la déclaration

    Nom : Capture.PNG
Affichages : 376
Taille : 25,6 Ko

    Le Group est géré par le GroupingLevel dans mon cas sur la table entière donc = 0
    (P.S. Cette notion reste encore floue dans mon esprit )

    Nom : Capture_2.PNG
Affichages : 364
Taille : 20,9 Ko

    et tu noteras que j'ai fait un test en ajoutant un second champ agregat (le nombre d'enregistrements) qui lui me renvoie bien une valeur

    Il va falloir que je fasse un test plus poussé dans un petit programme à part (comme d'habitude)

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 660
    Billets dans le blog
    65
    Par défaut
    Déjà, je m'en arrache les cheveux qui me restent
    requête de base :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT F.ANNEE,F.NUMERO,F.MNT_TOT,F.MONTANT_PAYE,MNT_TOT-MONTANT_PAYE SOLDE FROM FACTURES F
    WHERE CLIENT='2000'

    valeurs agrégats souhaitées
    122, 74800.56, 73986.74, 813.82


    et premier test rapide (pas en encore du localSQL)
    Nom : Capture_1.PNG
Affichages : 370
Taille : 38,5 Ko
    C'est le COUNT qui ne se montre pas le reste est correct

  7. #7
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT F.ANNEE,F.NUMERO,F.MNT_TOT,F.MONTANT_PAYE,MNT_TOT-MONTANT_PAYE SOLDE FROM FACTURES F
    WHERE CLIENT='2000'
    tu es sûr de ta syntaxe SQL ?
    j'aurais écrit :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT F.ANNEE,F.NUMERO,F.MNT_TOT,F.MONTANT_PAYE,(MNT_TOT-MONTANT_PAYE) as SOLDE FROM FACTURES F
    WHERE CLIENT='2000'

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 660
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par pprem Voir le message
    tu es sûr de ta syntaxe SQL ?
    OUI, ce côté ne pose aucun souci oui
    avec Firebird les parenthèses ne sont pas obligatoires, et le AS est optionnel

    non, c'est bien les agrégats qui me posent quelques soucis

  9. #9
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 543
    Billets dans le blog
    10
    Par défaut
    De mémoire il doit y avoir une relation maître détail pour les fonction d'agrégat avec des setRange

  10. #10
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 543
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Tu peux peux être ramener le résultat de ta requête en local dans un dataset en mémoire et faire ensuite et faire ensuite les agrégation sur ce dadaset

Discussions similaires

  1. Travailler sur une base SQL locale à distance
    Par max180 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/09/2012, 15h15
  2. [phpMyAdmin] Soucis d'import de base sql local-> live
    Par Silv4 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 03/04/2012, 11h08
  3. PL/SQL local subprograms
    Par yasstunisien dans le forum PL/SQL
    Réponses: 3
    Dernier message: 04/07/2011, 14h43
  4. [SQL-Serveur][Sybase]Fonctions d'agrégat imbriquées
    Par vincenteraptor dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/06/2006, 09h46
  5. [SQL] Combiner fonction d'agrégation et DISTINCT .
    Par p@radox dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/12/2004, 17h11

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