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 :

Aide dans l'utilisation d'une requête dans Sqlite


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut Aide dans l'utilisation d'une requête dans Sqlite
    Bonjour à tous

    Toujours dans mon perfectionnement de Sqlite, une question sur une requête Sql

    Voici ma requête initiale ou je regroupe à partir d'une table de compte toutes les valeurs correspondant au même Tiers
    et cela marche SUPER

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IdCpt,DateEnregistre,Tiers,Sum(Debit) AS Depenses,Sum(Credit) As Recettes  FROM DetailsCpt WHERE IdCpt = :IdxCpt
    GROUP By Tiers
    ORDER BY DateEnregistre Asc

    Je voudrai ajouter une sélection : tous les Tiers pour le mois de Juillet de l'année 2021 par exemple

    Comment comparer par rapport à la date d'enregistrement qui est de la forme "AAAA-MM-JJ" sous Sqlite chaque ligne de ma table à une valeur Année et Mois ?

    Je cale sur la démarche à adopter ?

    Merci de votre aide

  2. #2
    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
    Points : 3 611
    Points
    3 611
    Par défaut
    En fait tu peux considérer les dates comme des champs textes et donc faire le même type de comparaison.

    Dans ton cas tu peux vérifier que la date de l'enregistrement est supérieure ou égale au AAAA-MM-01 et inférieure au AAAA2-MM2-01 (AAAA/MM étant le mois année que tu recherches et AAAA2/MM2 le mois suivant).
    Sinon un LIKE "AAAA-MM-%" devrait aussi passer.

  3. #3
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Merci Patrick je vais essayer

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Tout dépend de comment est déclaré la dite date dans la bdd (texte, date, datetime voire real ou integer) perso, contrairement à pprem je préfère le type date au texte.

    Néanmois je pense que la fonction recherchée est strftime

    à essayer
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT IdCpt,DateEnregistre,Tiers,Sum(Debit) AS Depenses,Sum(Credit) As Recettes  
    FROM DetailsCpt 
    WHERE IdCpt = :IdxCpt
    AND strftime('%Y%m', DateEnregistre)='202107'
    GROUP By Tiers
    ORDER BY DateEnregistre Asc

    autres solution : AND strftime('%Y', DateEnregistre)=:AA AND strftime('%m', DateEnregistre)=:MMles possibilités sont nombreuses

    NB. attention à la casse du format dans la fonction strftime
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Sur ce, j'ai repensé aussi au fait qu'il était possible de créer ses propres fonctions pour SQLite, j'ai même écrit un billet https://www.developpez.net/forums/bl...nctions-suite/ cela pour traiter des dates telles que Patrick l'inscrivait dans sa BDD sous la forme aaaammjj
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Bonjour Serge

    J'ai essayé cette solution de Patrick et cela marche

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IdCpt,DateEnregistre,Tiers,Sum(Debit) AS Depenses,Sum(Credit) As Recettes  FROM DetailsCpt WHERE DateEnregistre like '2021-07-%' AND IdCpt = 1
    GROUP By Tiers
    ORDER BY DateEnregistre Asc


    Voici le Résultat
    Nom : Resultats.jpg
Affichages : 100
Taille : 157,8 Ko

    Bien attendu ce sont des Valeurs totalement fictives qui me servent pour les essais

    Mais je vais voir ta solution

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Sinon, n'est-ce pas la même question Problème execution requête sur SQlite pour un where entre deux dates ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DateEnregistre like '2021-07-%'
    c'est similaire à
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DateEnregistre Between '2021-07-01' and  '2021-07-31'
    voire pour les plus rigoureux
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DateEnregistre Between '2021-07-01' and  '2021-07-31T23:59:59'

    Et si l'on veut utiliser des paramètres

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DateEnregistre Between :pStartDE and :pEndDE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ParamByName('pStartDE').AsDateTime := StartOfAMonth(2017, 7);
    ParamByName('pEndDE').AsDateTime := EndOfAMonth(2017, 7);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par gegila Voir le message
    J'ai essayé cette solution de Patrick et cela marche
    Même si dans le principe je suis d'accord, ce n'est pas pour rien qu'il y a des fonctions date SQLite telle que strftime. Pour moi, à partir du moment où elles existent, autant les utiliser
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Merci pour toutes vos réponses très pertinentes

    J'ai essayé vos solutions elles marchent toute très bien

    Je pense que j'ai largement le choix pour résoudre mon Pb

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/11/2012, 13h51
  2. [WD11] Utilisation d'une requête dans un état
    Par jpeg_1980 dans le forum WinDev
    Réponses: 7
    Dernier message: 17/12/2008, 15h03
  3. Aide sur l'adaptation d'une requête.
    Par innova dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/03/2007, 16h30
  4. Réponses: 2
    Dernier message: 10/03/2006, 13h55
  5. [SYBASE] Aide pour l'écriture d'une requête
    Par karine77 dans le forum Sybase
    Réponses: 2
    Dernier message: 26/04/2005, 10h57

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