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

 Firebird Discussion :

Chercher par bits


Sujet :

Firebird

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut Chercher par bits
    Salut

    Je travaille avec Firebird 1.5 et, dans un table, j'ai un champ Varchar(1) qui peut tenir actif n'importe quel bit.

    On peut savoir quel bit est actif dans une requête SQL?

    Merci

  2. #2
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    c'est possible d'avoir un peu plus de précisions ?
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Oui, bien sur

    Par exemple, le champ peut avoir ces valeurs:

    00000001 - ça veut dire une chose
    00000010 - ça veut dire une autre
    00000100 - ça une autre en plus
    ....
    10000000 - et ça une autre

    C'est que je veux, est faire un case (o quelque chose comme ça) parce que la requête me renvoi, au lieu de ce varchar(1), une description. Quelque chose comme ça (que ne fonctionne pas, bien sur )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select
      case champ
        when BitActif(1) then 'bit 1 actif'
        when BitActif(2) then 'bit 2 actif'
        ....
      end
    from table
    Merci en avance

    A+

  4. #4
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut.
    Regarde du coté de l'UDF RFUNC, il y a pas mal de fonction sur les Bits dedans.

    Bonne continuation
    On progresse .....

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Merci, je le fait maintenant

  6. #6
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    cadetill, ca serait possible de proposer une réponse (exemple de code ou autre) ?
    Pour ceux qui se retrouveront avec le même problème.

    Et un petit résolu

    CV :
    - LinkedIn
    - Viadeo

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par yobenzen
    cadetill, ca serait possible de proposer une réponse (exemple de code ou autre) ?
    Pour ceux qui se retrouveront avec le même problème.

    Et un petit résolu

    Oui, bien sur, tout ça quan je réusi
    Aujourd'hui j'ai fait autres choses "plus importantes". Mon chef... tu sais?

  8. #8
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Citation Envoyé par cadetill
    Oui, bien sur, tout ça quan je réusi
    Aujourd'hui j'ai fait autres choses "plus importantes". Mon chef... tu sais?
    Ah ok
    Désolé, je croyais que tu avais fini...

    Bon courage alors
    CV :
    - LinkedIn
    - Viadeo

  9. #9
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut Cadetill,

    Dans ton problème, est ce qu'il n'y a qu'un bit qui est à 1 sur les 8 bits ou toute combinaison est possible?

    A+
    On progresse .....

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    Non, seulement 1 bit est à 1 parce qu'il indique le type du registre et n'a pas de sens que plusieurs bits sont à 1 (sauf s'il y a un erreur, bien sur)

    A+

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    Bon, aujourd'hui j'ai fait quelques test avec la UDF proposé par Andry (RFUNC) et encore avec la UDF ib_udf qu'elle a aussi des fonctions pour la manipulation de bits

    Le fonctionnement est le même: les fonctions on 2 parametres integer (les deux valeurs pour faire un XOR) et renvoie un autre integer (résultat du XOR)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select bin_xor(cast(champ as integer), 2) 
    from table
    Mais le "cast" me donne erreur (¿normal?)

    Peut être sera mieux me cree ma prope UDF?

    Merci

  12. #12
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    mais de quel type est ton champ ?
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  13. #13
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par cadetill
    ...j'ai un champ Varchar(1).....


    Merci

  14. #14
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut,

    Je vois pas trop comment tu fait pour enregistrer dans '00000001' dans un varchar.
    Porquoi ne pas faire le traitement dans l'application client.

    A+
    On progresse .....

  15. #15
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    pardon je n'avais pas vu
    et comment tu fait pour stocker 00000100 dans un varchar(1) ?

    c'est très fort ça !
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  16. #16
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    ceci dit tu peux y arriver en stockant des puissance de 2 dans un champ integer
    et en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE EXTERNAL FUNCTION BIN_AND
        INTEGER,
        INTEGER
        RETURNS INTEGER BY VALUE
        ENTRY_POINT 'IB_UDF_bin_and' MODULE_NAME 'ib_udf';
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  17. #17
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    @Andry et makowski: Je ne le fais pas, c'est un autre appli que le fait
    @makowski: ja vais essayer pour cet côté

    Merci

    A+

  18. #18
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    Bon, a la fin je m'ai fait ma propre UDF.

    J'ai fait une fonction que me renvoie le 1er bit a 1 (en théorie seulement 1 bit peut être a 1)

    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
    21
    22
    23
    24
    25
    26
    27
     
    function gf_FirstBitActif(aValue: PChar): integer;
    var
      OrdStr: byte;
      Temp: byte;
      i: integer;
      Str: string;
    begin
      Result := 0;
     
      Str := StrPas(aValue);
     
      if Str <> '' then
      begin
        OrdStr := Ord(Str[1]);
        for i := 1 to 8 do
        begin
          Temp := (OrdStr shr i) shl i;
          Temp := OrdStr xor Temp;
          if Temp <> 0 then
          begin
            Result := i;
            Break;
          end;
        end;
      end;
    end;
    Bon, avec ça je peux savoir ce que je veux et je peux faire par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select
        case bitactif(c.zahlm)
          when 1 then 'Effectif'
          when 6 then 'Chèque'
          when 7 then 'Carte'
          when 8 then 'Talon'
        end
    from tiqcap c
    Merci a tous

    A+

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

Discussions similaires

  1. decalage par bit
    Par nirvo_ca dans le forum C
    Réponses: 1
    Dernier message: 07/05/2010, 21h33
  2. Réponses: 3
    Dernier message: 08/06/2009, 15h00
  3. Copie bit par bit avec dd
    Par adm_windoz dans le forum Debian
    Réponses: 8
    Dernier message: 07/06/2008, 09h52
  4. Manipulation d'un String bit par bit
    Par CyberChouan dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2007, 15h48
  5. Lire bit par bit
    Par The_Undertaker dans le forum C++
    Réponses: 8
    Dernier message: 01/07/2005, 11h43

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