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

VBA Access Discussion :

YESNO / CHAR(25) : même traitement , résultat différent !


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de Frog74
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 171
    Points : 70
    Points
    70
    Par défaut YESNO / CHAR(25) : même traitement , résultat différent !
    Bonjour,

    je créer une table B avec un nombre de champ égale au nombre d'enregistrements d'une table A, les champs son nommés via la valeur des champs Nom des enregistrement.
    Ces champs représentent les entrées d'une table de vérité , que je rempli par la suite avec du code.

    Voila comment je créer mes champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For l = 1 To NbEvt
                rsEvt.FindFirst ("IDEvenement=" & l & " AND IDMachine=" & Me.IDMachine.Value)
                DoCmd.RunSQL "Alter table Modes add " & rsEvt("NomEvenement") & " YESNO"
            Next l
    NbEvt représente le nombre d'enregistrement dans la table A.

    Ensuite je "crée" des checkbox dans ma table via un traitement.

    Ensuite je dois remplir ma table de vérité , j'ouvre donc un recordset sur ma table toute fraiche :

    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
    For i = 0 To NbEvt - 1
                    For j = 0 To 2 ^ NbEvt - 1 Step 2 ^ i
                        For k = j To j + 2 ^ i - 1
                            rsModes.FindFirst ("[IDEntrée]=" & k + 1)
                            If (k <= 2 ^ i - 1) Then
                                rsModes.Edit
                                rsModes(i + 1) = 0
                                rsModes.Update
                            Else
                            rsModes.FindFirst ("[IDEntrée]=" & k + 1 - 2 ^ i)
                               If (rsModes(i + 1) = 0) Then
                               rsModes.FindFirst ("[IDEntrée]=" & k + 1)
                                    rsModes.Edit
                                    rsModes(i + 1) = -1
                                    rsModes.Update
                                Else
                                    rsModes.FindFirst ("[IDEntrée]=" & k + 1)
                                    rsModes.Edit
                                    rsModes(i + 1) = 0
                                    rsModes.Update
                                End If
                            End If
                        Next k
                    Next j
                Next i
    Ce code me donne :
    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
    Evt1	Evt2	Evt3	Evt4
    0	0	0	0
    -1	0	0	0
    0	-1	0	0
    -1	-1	0	0
    0	0	-1	0
    -1	0	-1	0
    0	-1	-1	0
    -1	-1	-1	0
    0	0	0	-1
    -1	0	0	-1
    0	-1	0	-1
    -1	-1	0	-1
    0	0	-1	-1
    -1	0	-1	-1
    0	-1	-1	-1
    -1	-1	-1	-1
    Seulement je voudrais avoir des "ON" pour les -1 (coché) et des "OFF" pour les 0 (non coché), au pire des vrai , faux.

    Donc je remplace mon YESNO dans la création de mes champs par Char(25) , ensuite je remplace mes 0 par "OFF" et mes -1 par "ON" dans le remplissage de la table.

    Mais la j'obtient que des off partout , aucun ON, alors que le traitement n'a pas changé.

    J'aurais besoin d'une lumière pour éclaircir ce trou ...
    Pouvez vous svp vous pencher sur le sujet ?

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    Bonjour,
    il faut laisser ta table de vérité en booléens (avec des des -1 et des 0).
    Pour la présentation , (pour afficher ce que tu veux en places des -1 et des 0) tu fais une requete avec IIF() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IIF(evt1 =-1;"ON";"OFF") AS Col1, ...

  3. #3
    Membre régulier Avatar de Frog74
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    Merci ,

    j'ai trouvé un moyen de remplir ma liste , seulement la liste n'affiche rien , voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sql = "SELECT IDEntrée   "
            For l = 1 To NbEvt
                rsEvt.FindFirst ("IDEvenement=" & l & " AND IDMachine=" & Me.IDMachine.Value)
                DoCmd.RunSQL "Alter table Modes add " & rsEvt("NomEvenement") & " YESNO"
                sql = sql + ",IIF(" & rsEvt("NomEvenement") & " =-1;On;Off) AS " & rsEvt("NomEvenement")
            Next l
            sql = sql + ",Modes from Modes"
            me.listeModes.rowsource = sql
    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = sql + ",IIF(" & rsEvt("NomEvenement") & " =-1;"On";"Off") AS " & rsEvt("NomEvenement")
    J'ai une erreur sur ON.

    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = sql + ",IIF(" & rsEvt("NomEvenement") & " =-1;'On';'Off') AS " & rsEvt("NomEvenement")
    rien ne se passe.

    voila un exemple de SQL sur un txt:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDEntrée,IIF(Evt1 = -1;On;Off) AS Evt1,IIF(Evt2 = -1;On;Off) AS Evt2,IIF(Evt3 = -1;On;Off) AS Evt3,IIF(Evt4 = -1;On;Off) AS Evt4,Modes from Modes

    Aucune erreur à l'éxécution mais si je ferme le formlulaire , au lancement du formailre j'ai une erreur :
    erreur de syntaxe dans IIF(Evt1 = -1;On;Off)

    Ce qui est bizarre c'est que le nombre de collone change en fonction de NbEvt à chaque traitement, donc le SQL semble quand même bien être pris en compte , mais rien n'est affiché autant dans les entête de collones que dans les collones.

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    petite erreur :
    SELECT IDEntrée,IIF(Evt1 = -1;On;Off) AS Evt1 ...
    Il faut donner un nom d'alias (ici EVT1) différent du nom de la colonne initiale

    as TOTO1 par ex.

  5. #5
    Membre régulier Avatar de Frog74
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    merci , j'ai résolu mon problème , tout s'affiche correctement , seulement j'aimerais trouvé un moyen d'avoir le meme nom de collone que le paramètre de la fonction , en rajoutant une chaîne de caractère comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = sql + ",IIF(" & rsEvt("NomEvenement") & "  = -1 ,'On','Off') AS Nom" & rsEvt("NomEvenement")
    seulement le nom est assez moche c'est un truc du genre : NomEvt1

    je n'ai pas encore trouvé l'astuce mais je met le tag résolu ..
    si jamais tu a une idée

    a+

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

Discussions similaires

  1. [MySQL] Même encodage, résultat différent !
    Par GYK dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 07/11/2014, 09h46
  2. Même requête, résultats différents
    Par zorino dans le forum SQL
    Réponses: 8
    Dernier message: 18/06/2008, 12h31
  3. Réponses: 6
    Dernier message: 24/05/2007, 14h40
  4. [SQL2K]Une même requête des résultats différents
    Par jeeerome dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/07/2006, 15h20
  5. Résultats différent entre une requête SQL, et la même en VBA
    Par thetaps dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/09/2005, 13h05

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