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

Lazarus Pascal Discussion :

SQLite : boolean et dbcheckbox [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Points : 69
    Points
    69
    Par défaut SQLite : boolean et dbcheckbox
    Bonjour,

    J'ai un souci avec l'utilisation des boolean dans sqlite.

    dans une base sqlite, un champ boolean a les valeurs 'Y' ou 'N'.

    Je modifie la valeur de ce boolean avec un dbcheckbox dont les valeurs checked est 1 et unchecked est 0.

    en utilisant l'outil SQlite Expert personnel je me suis rendu compte que mes valeurs de mes boolean posaient problème. elle sont toujours 'Y' ou 'N'.

    Elle ne devraient pas plutôt être 1 ou 0 ?

    Merci d'avance

    Jazz

  2. #2
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    bonsoir,
    quelle version de sqlite utilises-tu ?
    parce qu'en version sqlite3 :
    SQLite ne dispose pas d'une classe de stockage Boolean distinct. Au lieu de cela, les valeurs booléennes sont stockés sous forme d'entiers 0 (faux) et 1 (vrai).

    Amicalement, nullosse

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Points : 69
    Points
    69
    Par défaut
    Merci nullosse pour ta réponse

    J'utilise la version 3 de Sqlite .

    stocker les valeurs booléennes sous forme d'entiers 0 (faux) et 1 (vrai) , c'est justement ce que je souhaite.

    A la place les valeurs sont stockées sous la forme de 'Y' ou 'N' et je ne comprends pas pourquoi.

    J'ai bien défini dans la base le champs comme boolean pourtant.

    merci d'avance

    Jazz

  4. #4
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    si ta base n'est pas trop secrète met nous la en pièce jointe ou alors duplique la avec aucune data dedans pour voir la structure

  5. #5
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 745
    Points
    9 745
    Par défaut
    Tu utilises SQLite Expert, ne serait-ce pas la représentation booléenne des données SQLite de ce logiciel qui ferait ça ?

    As-tu regardé le contenu direct dans SQLite ?
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    le type des champs de SQLite est indicatif, ils peuvent contenir n'importe quoi. Si tes lignes contiennent des N et des Y c'est qu'une requête les y a placé. ça aurait pu être "Oui" et "Non" ou toute autre valeur comme "Peut-être"
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Points : 69
    Points
    69
    Par défaut
    Merci à vous pour vos réponses

    A titre indicatif, J'ai mis en pièce jointe une version de ma base qui ne contient que le table FAMILLES qui pose problème.
    Pour info j'ai été obligé de modifier l’extension en .doc sinon je ne pouvais pas la transmettre.
    J'ai regroupé tous les booléens en fin de description de table FAMILLES

    As-tu regardé le contenu direct dans SQLite ?
    A vrai dire je ne sais pas comment procéder pour visualiser le contenu en direct.

    j'utilise 2 outils pour gérer Sqlite : Sqlite manager du firefox et Sqlite Expert Personnel.

    J'ai oublié de préciser que j'utilise ZEOS 7 pour accéder à ma base.

    quand je modifie la valeur d'un booléen avec une requête "UPDATE Familles set emailing = 1 where Nom = '+quotedStr(strNom)" J'ai bien 1 dans le booléen.

    Par contre quand je passe par un dbcheckbox pour initialiser un booléen, j'ai l'impression de relire la métamorphose de Kafka.
    J'ai même utiliser sauvagement le code suivant pour forcer à 1 ou 0 le valeur d'un booléen rétif .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TFormFamilles.DBCheckBox1Click(Sender: TObject);
    var s : string;
    begin
      s := DBCheckBox1.Field.AsVariant;
      dm.qFamilles.FieldByName('newTest2').AsBoolean:=strToBool(s);
      if s = '1' then
        dm.qFamilles.FieldByName('newTest2').AsInteger:=1
      else
      dm.qFamilles.FieldByName('newTest2').AsInteger:=0;
    end;
    Et en fait je récupère quand même soit du Y ou du N dans ce booléen retord

    le type des champs de SQLite est indicatif, ils peuvent contenir n'importe quoi. Si tes lignes contiennent des N et des Y c'est qu'une requête les y a placé. ça aurait pu être "Oui" et "Non" ou toute autre valeur comme "Peut-être"
    Est il possible à partir d'un dbcheckbox d'initialiser à 1 ou 0 un booléen dans une table ?

    Merci d'avance pour vos réponses

    Jazz
    Fichiers attachés Fichiers attachés

  8. #8
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    bonjour,
    j'ai fait quelques essais avec la base ecole en sqlite3 et lazarus en utilisant Zeos et SqlDb, le meilleur type pour les booléens semble être l'entier ( 1 pour vrai , 0 pour faux). Par contre quand on utilise le type entier pour un booléen il faut mettre la valeur du DbCheckbox ValueChecked à 1 et ValueUnChecked à 0. En pièces jointes voilà ce que cela donne en utilisant sqlite3 Management Studio pour vérifier la base de données.
    emailing de type Bool, newTest2 de type Boolean, TestBoolean de type integer.
    Comme on peut le constater dans la fenêtre Form1, dans la partie SqlDB les types Bool et Boolean ne s'affichent pas bien dans le DBGrid et les DBCheckBox tandis que le type Integer utilisé comme booléen s'affiche correctement.

    Amicalement, nullosse
    Images attachées Images attachées   

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Points : 69
    Points
    69
    Par défaut
    Merci beaucoup Nullosse pour ta réponse

    J'ai reproduis ton test et je rencontre un obstacle à l'affichage sur le champ testBoolean

    dans le dbgrid il le considère comme integer au lieu de boolean

    Dans son dbcheckbox j'ai mis les propriétés checked à 1 et unchecked à 0

    J'ai mis en pièce jointe une copie de la Form et de SQLITE Pro

    Je pense faire une bourde sur la déclaration de mes champs dans le form mais je ne vois pas ou..

    pour info, Je suis sous Lazarus 1.0.6 et Seven 64 Pro

    Amicalement

    Jazz
    Images attachées Images attachées   

  10. #10
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    j'avais oublié de te dire une chose :

    dans les DbGrid j'ai mis la propriété ButtonStyle à cbsCheckboxColumn ( au lieu de cbsAuto) pour les colonnes (dbgridcolumns) qui sont sensées contenir un booléen. EN effet le Dbgrid a des difficultés à deviner de lui-même que l' entier représente un booléen.

    Amicalement, nullosse

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Points : 69
    Points
    69
    Par défaut
    Merci nullosse pour ta réponse

    Je viens de modifier les colonnes de mes dbgrid et cela s'affiche impeccablement.

    dorénavant, je vais utiliser le type Integer comme booléen .

    Amicalement

    Jazz

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

Discussions similaires

  1. [Lazarus] Valeur Boolean depuis Sqlite
    Par caku dans le forum Lazarus
    Réponses: 3
    Dernier message: 09/06/2010, 14h08
  2. qui connait sqlite ?
    Par Emmanuel Lecoester dans le forum SQLite
    Réponses: 23
    Dernier message: 19/02/2010, 13h44
  3. [C#] Comment passer un paramètre Boolean au service Web ?
    Par ramalho dans le forum Services Web
    Réponses: 3
    Dernier message: 07/06/2004, 17h31
  4. pb avec la fonction boolean sur eclipse
    Par mcay dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/05/2004, 09h37
  5. [conversion][boolean]
    Par nenoeil dans le forum Langage
    Réponses: 10
    Dernier message: 12/05/2004, 11h19

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