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

SQLite Discussion :

Affichage conditionnel dans une vue SQL


Sujet :

SQLite

  1. #21
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Bon dimanche Sergio ... Reposons nous
    bon oui, reposons nous ben pas vraiment : repas de famille en Vendée (comment savais-je que j'étais avec des Vendéens ? facile les hommes à un bout de la table les femmes à l'autre! ça ne s'invente pas)

    pour reprendre le SQL voici une solution qui à priori retrouve tout tes petits (avec le jeu d'essai fourni)
    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
     
    -- Affaires sans devis avec ou sans factures
    -- notées par un 0 en premier
    SELECT 0, a.numAffaire,
            a.designation,
            '' as PKDEVIS,
            '' as NUMDEVIS,
            f.numFacture,
            f.fkdevis
      FROM affaires a
           LEFT JOIN devis d ON a.pkaffaires = d.fkaffaires
           LEFT JOIN factures f ON a.pkaffaires = f.fkaffaires
     WHERE (f.fkdevis is null or f.fkdevis=0) 
      UNION
    -- affaires avec Devis avec ou sans factures sur le devis
    -- notées par un 1 au début 
    SELECT 1,a.numaffaire,a.designation,d.pkdevis,d.numdevis,f.numfacture,f.fkdevis
    FROM affaires a  join devis d on a.pkaffaires=d.fkaffaires  << note ici le join et non left join 
                    left join factures f on d.pkdevis=f.fkdevis        
    ORDER by 1,numaffaire,pkdevis
    SQlite permettant de trier une colonne
    j'ai vérifié : 1 - le nombre d'affaires 15000 à 15005 soit 6 ok
    2 - le nombre de devis 1 à 7 ok correspond au nombre de ligne de la table devis
    3 - le nombre de factures FA001 à FA013 ok
    total résultats 15 lignes
    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

  2. #22
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    tu es comme moi, tu lâches pas l'affaire bravo bien trouvé, mais tu as le même bug que moi, je ne sais pas d'où il vient mais si j'ajoute un nouveau dossier affaire, il s'affiche bien avec devis et facture = null
    Mais si j'ajoute un devis et pas de facture la ligne d'avant reste ! bon c'est pas bien grave mais bon ^^

    Voici le résultat avec ta solution et juste en dessous avec la mienne, tu le vois le résultat est le même, cela doit venir de mon code C# pourtant le sgdb gére toutes les vues... à voir dans le futur

    Nom : 1.PNG
Affichages : 173
Taille : 19,0 Ko

    Nom : 2.PNG
Affichages : 139
Taille : 10,7 Ko

  3. #23
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    cela doit venir de mon code C#
    non , il y a bien un problème de sélection car avec SQLite en suivant les opérations décrites j'arrive au même résultat

    le cas qui fait un doublon non voulu est donc : une affaire avec un devis sans facture

    voilà donc comment je modifie la clause where (comme il y en a qu'une seule pas de problème pour la situer )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      WHERE (d.pkdevis is null AND f.fkdevis IS Null) -- ni devis ni facture 
               or f.fkdevis=0  -- une facture pas de devis selon tes conventions
    ce qui à l'air de fonctionner
    j'ajoute une affaire au jeu d'essai qui, SQL juste, devait me donner 15 lignes j'obtiens 16 lignes
    je rajoute un devis sur cette affaire j'obtiens toujours 16 lignes
    je supprime le devis : encore 16 lignes
    j'ajoute une facture en fait je tente de le faire mais j'ai un problème de foreign key ben oui il n'y a pas de devis 0 !!!!!!
    et pourtant étrangement je vois cette valeur 0 (là je me dis que SQLite permet des choses étranges où alors tu utilises une astuce ?)

    bref pour tester j'ôte la contrainte sur facture.fkdevis et tant qu'à faire plutôt que 0 autant la mettre nullable , la dernière partie est une mauvaise idée je n'obtiens plus que 15 lignes en fait, ne maîtrisant pas bien SQLite c'est que je ne sais pas bien mettre NULL dans les données, quelques subtilités de saisie plus tard que factures.fkdevis soit NULL ou égal à '0' j'obtiens bien 16 lignes

    je ne teste pas les autres cas normalement impossibles , il est déjà l'heure de se mettre au taf , mon cerveau a été bien réveillé

    une dernière note cependant : j'ai été obligé de plonger (de la part d'un ex scaphandrier c'est normal) un peu plus dans la structure de ta base et là
    je vois plein de choses qui m'interpellent , cela a commencé avec le champ combo de affaires mais s'est poursuivi par la table factures avec les règlements (modes<< surtout qu'il y a une table,condition et date) , puis la tva (qui devrait être AMHA un taux pas un montant) mais bon je me dis que c'est une base test et pas forcément (j'espère) la structure finale ! << sinon je monte à Lorient et
    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

  4. #24
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    Alors que je t'explique avant que tu ne me fouéttes sur la place public

    La colonne combo était une astuce pour afficher une concaténation dans une combobox de mon code C#
    je travail avec des bindingsources et je ne sais pas comment faire autrement, d'autant que pour complexifier le tout je travail en IOC
    (injection de dépendance) mon soft de base et vide et il va lire des DLL pour permettre d'ajouter les fonctions qui créeront les tables dans la BDD et les menus et forms du soft.
    Voila pourquoi pas mal de chose se retrouve dans les tables, je ne sais pas les trouver sinon car au lancement je ne connais pas les plugins qui vont se lancer.

    Pour la TVA c'est le montant du devis ou facture pour affichage dans les vues, le reste est géré par des fichiers binaires (les lignes) et là je fais bien appel à un code de tva (de la table tva), reste pour l'affichage le montant total de la tva.
    De même les mode et condition de règlement peuvent être modifié dans les fichiers binaires, mais ils sont placé en auto via les tables par défaut, mais l'user peut les modifier pour un devis ou une facture et son donc archivés dans la table devis ou facture.
    Je programme en utilisant, donc je suis mes contraintes et mes besoins
    EX : une grosse affaire reprend les conditions type de la ste concernée (60j fdm le 10 par exemple), mais pour une intervention en dépannage j'y placerai AU COMPTANT par exemple. Juste pour cette facture.

    Je n'ai pas encore fait le module compta pur car j'attends des retours Merise de ma femme qui est comptable

    Pour la requête je l'ai testé et elle fonctionne très bien, sauf que j'ai remplacé <1 plutôt que =0 car j'ai des vieilles facture qui avaient encore -1 au lieu de 0 (erreur de codage C# ^^).
    Bon cela me gène pas car en tant qu'automaticien de formation je ne fais jamais d'égalité
    @++ pour de prochaine aventure ^^
    PS : je te post les images du test dés que je fini de recompiler les Dll (XD)

  5. #25
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je me doutais bien qu'il y avait anguille sous roche et que s'il y avait réplication de champs cela avait quelque chose à voir avec la programmation.

    Moi aussi je me bat avec les livebindings et c'est pas toujours moi qui gagne mais je reste ferme sur ma structure de BDD .

    Tout d'abord à contrario de SQLite, Firebird puisqu'il s'agit de Firebird permet les champs calculés (que je n'ai pas , encore?, trouvé dans SQLite) il m'est donc facile de pallier à l'équivalent d'un champ comme le combo en le déclarant comme ceci par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    COMBO VARCHAR(40) COMPUTED BY (CHAMP1||' '||CHAMP2) -- reste que si CHAMP1 est null COMBO est null  
              COMBO VARCHAR(40) COMPUTED BY TRIM(COALESCE(CHAMP1,' ')||' '||CHAMP2) -- pour pallier à la gestion des Null mais c'est pas très beau ;)
    cependant ce n'est pas une chose que je ferai ou du moins que je ne fais plus (ma programmation a évolué depuis mon premier ZX << oui moi aussi)
    J'utilise plutôt ces champs calculés pour des totaux genre TOTAL INTEGER COMPUTED BY (INVENTAIRE+ENTREE-SORTIE) qui permet d'éviter d'avoir à faire une vue (je n'ai jamais été trop copain avec les vues, ce qui est un tort je l'avoue).
    Sinon j'utilise presque toujours des requêtes plutôt que des tables (les vues, en tout cas pour Firebird des versions < 3, n'étant pas indexées)
    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. #26
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    oui je comprends, mais sqlite à des contraintes car il n'est pas en mode serveur, il faut que je regarde du coup si on peut faire des triggers et des fonctions ce qui permettrais de soulager le code C#. je m'y penche de suite :p
    a toute

    en fait j'aurais pu faire un trigger pour ajouter automatiquement la concaténation à ma table
    je le trouve de plus en plus évoluer contrairement à ce qu'on m'en avait dit ^^

    Exemples

    Supposons que les clients soient stockés dans la table "clients" et que leurs ordres soient eux conservés dans la table "ordres", le trigger suivant s'assure que toutes les commandes associées à un client soient redirigées lorsqu'il change d'adresse e-mail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        CREATE TRIGGER update_adresse_client UPDATE OF adresse ON clients 
          BEGIN
            UPDATE ordres SET adresse = new.adresse WHERE nom_client = old.nom;
          END;
    Avec un tel trigger d'installé, l'exécution de l'ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        UPDATE clients SET adresse = '1 Main St.' WHERE nom = 'Jack Jones';
    provoque automatiquement l'exécution de l'ordre suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        UPDATE ordres SET adresse = '1 Main St.' WHERE nom_client = 'Jack Jones';

  7. #27
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonsoir,

    les triggers je connaissais mais pas avec SQLite et les fonctions SQLite sont pour moi une inconnue, j'ai pour l'instant des besoins de base. J'ai même trouvée une astuce evec les composants que j'utilise pour carrément mettre la base en mémoire !
    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

  8. #28
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    c'est ça qui est beau dans notre job, il vaut mieux mourir le soir car on apprendra tous les jours

  9. #29
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    ce matin pour chauffer les neurones j'ai regardé cette histoire de fonction (UDF), bon j'ai compris le principe mais je ne pense pas en avoir besoin (heureusement)
    je me suis ensuite penché sur les Common Table Expressions aka CTE (WITH .....) chouette c'est implémenté
    seule déception pas de possibilité de PROCEDURE ( une recherche sur le net me dit qu'il y a eu quelques tentatives, que cela semble prévu dans le futur) on fera avec ce que l'on a, comme pour les fonctions je ne pense pas en avoir besoin (en tout cas pour l'application actuelle).

    Un truc qui m'a plu le projet SQLite Archiver dans mes cartons (besoins de l'entreprise) il y a un projet de ce type pour l'archivage des mails donc j'étudierai ça (si je m'en souviens ) au moment ad hoc (<< pas hareng ni capitaine contrairement à ce que mon correcteur orthographique m'a suggéré car j'avais mis un h à ad )

    et contrairement à ta citation moi je dirai qu'une bonne journée est une journée où l'on apprend quelque chose

    Donc c'est fait : ma journée sera bonne

    @+
    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

  10. #30
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    Tu as ben raison

    Tiens une question me vient d'un coup... Peut-on chiffrer une BDD Sqlite ?
    ben oui ! Comme y'a pas d'user ni d'admin le fichier est lisible par tout logiciel ad hoc

    Je vais regarder du codé du dot.Net du coup, car je ne pense pas que cela soit prévu dans SQLITE -_-

    kenavo l'ami ! Bonne prog

  11. #31
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par adn56 Voir le message
    Peut-on chiffrer une BDD Sqlite ?
    ça j'en suis presque certain, mais pas dans sa version de base lire ici. Comme soulevé, à juste titre, dans la discussion: "à quoi bon ?" le domaine principal d'une utilisation de SQLite ne le justifie pas
    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

  12. #32
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 83
    Points : 96
    Points
    96
    Par défaut
    En effet c'est presque trop simple ^^

    You can password protect SQLite3 DB. For the first time before doing any operations, set password as follows.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
    conn.SetPassword("password");
    conn.open();
    then next time you can access it like

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;");
    conn.Open();
    Merci pour ton lien ! je vais faire un essais si j'ai le temps car j'aimerai voir comment les gestionnaires vont réagir

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Affichage personnalisé dans une requête SQL
    Par kroma23 dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/12/2012, 09h34
  2. If multiple dans une vue SQL
    Par michaeljeru dans le forum MySQL
    Réponses: 1
    Dernier message: 27/07/2009, 16h32
  3. "Affichage conditionnel" dans une page JSF
    Par Niniz dans le forum JSF
    Réponses: 2
    Dernier message: 19/07/2007, 12h14
  4. requête imbriquée dans une vue SQL
    Par captainamerica75 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/05/2007, 14h39
  5. Champ conditionnel dans une vue
    Par mfmf99 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/09/2006, 22h49

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