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

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien Superieur en Informatique
    Inscrit en
    septembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien Superieur en Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2015
    Messages : 83
    Points : 46
    Points
    46
    Par défaut Requête SQL avec paramètres valeurs QComboBox.
    Bonjour,

    Je voudrais créer une table temporaire (SQLITE) pour afficher une comparaison des montant dans deux colonnes. en exécutant le requête suivante dans l'éditeur, je reçois un tableau qui m'affiche
    le résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE VIEW tmp_comparaison AS SELECT ident, intitule,
              SUM(CASE WHEN periode ='2021-03' THEN montant ELSE 0 END) '2021-03',
              SUM(CASE WHEN periode ='2020-03' THEN montant ELSE 0 END) '2020-03'
              FROM factures
              WHERE periode in ('2021-03', '2020-03')
              GROUP BY ident
    Je voudrais paramétré cette requête en utilisant deux combobox, le premier pour la période Mois et l'autre Mois-1 et afficher le résultat sur un tableview.
    Le problème, le tableau est vide !!!!

    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
     
                mois = self.ui.cb_mois.currentText()   #1er combobox
                mois_ant = self.ui.cb_mois_ant.currentText() #2ème combobox
     
                requete = QSqlQuery()
                requete.prepare('''CREATE VIEW tmp_comparaison AS SELECT ident, intitule,
                    SUM(CASE WHEN periode =:mois THEN montant ELSE 0 END) :mois,
                    SUM(CASE WHEN periode =:mois_ant THEN montant ELSE 0 END) :mois_ant
                    FROM factures
                    WHERE periode in (:mois, :mois_ant)
                    GROUP BY reference
                    ORDER BY ident''')
                requete.bindValue(":mois", mois)
                requete.bindValue(":mois_ant", mois_ant)
                requete.exec()
     
            self.model_comparaison_ventes = QSqlRelationalTableModel()
            self.model_comparaison_ventes.setTable("tmp_comparaison")
            self.model_comparaison_ventes.select()
            self.ui.tableView_comparaison.setModel(self.model_comparaison_ventes)
    J'ai déjà posté mon problème au forum QtGui, on m'a conseillé que peut être il y a une erreur de syntaxe dans la requête ??
    Merci par avance pour votre réponse.

  2. #2
    Membre du Club
    Homme Profil pro
    Technicien Superieur en Informatique
    Inscrit en
    septembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien Superieur en Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2015
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    Comme j'ai déjà posté la solution de mon problème au forum QtGui, voici la requête pour ceux qui auront besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    requete = QSqlQuery()
    requete.exec_('CREATE VIEW tmp_comparaison AS SELECT ident, intitule, SUM(CASE WHEN periode = "'+ mois +'" THEN montant ELSE 0 END) AS "'+ mois +'", SUM(CASE WHEN periode = "'+ mois_ant +'" THEN montant ELSE 0 END) AS "'+ mois_ant +'" FROM factures GROUP BY ident  ORDER BY intitule')

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 720
    Points : 34 312
    Points
    34 312
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    je ne suis pas un surdoué de SQLite mais quelque chose m'interpelle, vous indiquez
    Je voudrais créer une table temporaire
    or vous créez une vue (VIEW) ce qui est quelque chose de permanent !

    une table temporaire AMHA se crée avec un CREATE TEMPORARY TABLE temp.<nom de table>

    dans votre cas quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TEMPORARY TABLE temp.comparaison 
    (ident integer,
     intitule text,
     mnt_periode DOUBLE,
     mnt_previous DOUBLE);
    que vous allez remplir avec un SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO temp.comparaison SELECT SELECT ident, intitule,
                    SUM(CASE WHEN periode =:mois THEN montant ELSE 0 END) :mois,
                    SUM(CASE WHEN periode =:mois_ant THEN montant ELSE 0 END) :mois_ant
                    FROM factures
                    WHERE periode in (:mois, :mois_ant)
                    GROUP BY reference
    avant de faire un simple SELECT dessus.

    D'un autre côté, je ne vois pas pourquoi vous avez besoin de cette table temporaire alors qu'un SQL suffirait, mais il y a peut-être une raison dans vos traitement

    Ce que je ne sais pas c'est si, la table se vide à la fin de session ou à la fin de la transaction à plus calé
    ce qui se paramètre avec le SQGBD Firebird en utilisant les ON COMMIT PRESERVE ROWS/ON COMMIT DELETE ROWS
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien Superieur en Informatique
    Inscrit en
    septembre 2015
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien Superieur en Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2015
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    Peut-être que je me suis mal exprimé mais, je voudrais parler de table view.

    avant de faire un simple SELECT dessus.
    D'un autre côté, je ne vois pas pourquoi vous avez besoin de cette table temporaire alors qu'un SQL suffirait, mais il y a peut-être une raison dans vos traitement
    Mon but de faire un tableau croisé dynamique. comme la fonction PIVOT n'existe pas dans SQLITE j'ai trouvé sur le net cet astuce pour contourner cet obstacle.
    Merci

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

Discussions similaires

  1. Requête SQL avec paramètre sous visual studio 2008
    Par Jeecer dans le forum Accès aux données
    Réponses: 3
    Dernier message: 21/08/2011, 10h18
  2. Appel requête SQL avec paramètre
    Par sgcb01 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 13/11/2008, 12h13
  3. Requète SQL avec paramètres
    Par Stouille89 dans le forum C++Builder
    Réponses: 6
    Dernier message: 08/01/2008, 07h54
  4. Requête SQL avec paramètre sur BDD Access
    Par BigMike dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/06/2007, 12h21
  5. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33

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