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

Requêtes et SQL. Discussion :

Mettre à jour un champ Boolean avec une clause "WHERE"


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Mettre à jour un champ Boolean avec une clause "WHERE"
    Bonjour tout le monde,

    Je vous présente ma BDD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "TableTest"
    idAdo     |    test       |    test2
    avec les champs "test" et "test2" booleéns et le champ "idAdo" de type nombre incrémentiel.

    J'ai un formulaire avec une listbox "lstPublic" alimentée par une table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    "TableListe"
    Liste
    test
    test2
    avec le champ "Liste" de type texte contenant les entrées "test" et "test2".

    Lorsque je clique sur un élément de la listbox (qui contient donc "test" et "test2"), je lance ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = 0 To Me.lstPublic.ListCount - 1
        If Me.lstPublic.Selected(i) Then
            CurrentDb.Execute ("INSERT INTO TableTest (""" & Me.lstPublic.ItemData(i) & """) VALUES (TRUE)")
        End If
    Next
    En fonction de l'élément de la listbox sur lequel je clique, une entrée apparait dans ma TableTest avec sous un champ la valeur "VRAI" (une case cochée en réalité): jusque là, pas de soucis particulier...

    Par contre, si je veux ajouter une clause "WHERE" dans ma requête, cela ne fonctionne plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = 0 To Me.lstPublic.ListCount - 1
        If Me.lstPublic.Selected(i) Then
            CurrentDb.Execute ("INSERT INTO TableTest (""" & Me.lstPublic.ItemData(i) & """) VALUES (TRUE) WHERE idAdo = " & Me.id.Value & " ")
        End If
    Next
    Je voudrais qu'un champ de TableTest (soit "test" soit "test2") se mette en "VRAI" à l'endroit ou mon "idAdo" est égal à la valeur du champ "id" de mon formulaire.

    L'erreur est la suivante:
    Point-Virgule absent à la fin de la requête SQL

    Mais même si je rajoute ce point-virgule, l'erreur persiste...

    Quelqu'un aurait il une idée ?
    J'espère avoir été assez clair sur mon problème et avoir donné assez de détails.
    Merci d'avance à tout ceux qui se pencheront sur mon problème.

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,


    Le WHERE n'a pas de sens avec un VALUES


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je voudrais qu'un champ de TableTest (soit "test" soit "test2") se mette en "VRAI" à l'endroit ou mon "idAdo" est égal à la valeur du champ "id" de mon formulaire.
    Est-ce bien un INSERT que tu veux faire? Si je comprends ce que tu veux dire, cela ressemble plutôt à un update...
    quelque chose du genre (non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE TableTest SET " & Me.lstPublic.ItemData(i) & " = TRUE WHERE idado= " & Me.id



    A moins qu'il ne s'agisse effectivement d'un ajout avec 2 valeurs à renseigner...

    quelque chose du genre (non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "INSERT INTO TableTest (" & Me.lstPublic.ItemData(i) & ",idado) VALUES (TRUE," & Me.ID & ")"

    Bon courage

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Effectivement, je me suis complètement trompé: ce n'est pas in "INSERT INTO" mais bien un "UPDATE" que je dois utiliser.

    Lorsque j'ouvre mon formulaire, une entrée se crée automatiquement dans ma table "TableTest" donc une valeur pour "idAdo" y est automatiquement insérée.

    Je voudrais donc mettre à "TRUE" une colonne ("test" ou "test2").

    J'ai donc utilisé ceci comme tu me l'as proposé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute ("UPDATE TableTest SET " & Me.lstPublic.ItemData(i) & " = TRUE WHERE idAdo = " & Me.id & " ")
    mais j'ai une erreur:
    "Trop peu de paramètres. 1 attendu."

    J'ai modifié des petites choses dans la requête comme le nombre de guillement, "me.id" changé en "me.id.value" mais j'ai toujours cette erreur...

    merci pour ton début de réponse

    EDIT: je viens de vérifeir mes requêtes et cela fonctionne maintenant (je me suis trompé dans le nom d'un champ)

    Cette requête fonctionne parfaitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CurrentDb.Execute ("UPDATE TableTest SET " & Me.lstPublic.ItemData
    (i) & " = TRUE WHERE idAdo = " & Me.id & " ")
    Merci pour l'aide

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Pas le temps maintenant d'étudier en détail... mets un point d'arrêt sur cette ligne et regarde dans la fenêtre d'exécution ce que donne l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "UPDATE TableTest SET " & Me.lstPublic.ItemData(i) & " = TRUE WHERE idAdo = " & Me.id & " "

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

Discussions similaires

  1. mettre à jour un champs à partir d'une requête "count"
    Par ninikosim dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/04/2011, 16h32
  2. [Toutes versions] Mettre à jour un champ à partir d'une variable
    Par familledacp dans le forum VBA Access
    Réponses: 6
    Dernier message: 25/04/2009, 20h43
  3. Comment mettre à jour un champ BLOB avec une TIBQUERY ?
    Par colorid dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/02/2008, 19h00
  4. Réponses: 3
    Dernier message: 09/02/2007, 18h51
  5. Réponses: 3
    Dernier message: 09/07/2004, 10h23

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