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

IHM Discussion :

Ajouter Valeur dans une table si celle-ci n'est pas contenue dans la liste. [AC-2007]


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Points : 76
    Points
    76
    Par défaut Ajouter Valeur dans une table si celle-ci n'est pas contenue dans la liste.
    Bonjour,

    J'utilise un formulaire avec 3 zones de liste déroulante aux quelles je veux appliquer la même action :
    Que l'utilisateur puisse entrer une valeur qui n'est pas comprise dans la liste et que celle-ci soit enregistrer dans la table en question.
    J'ai déjà réalisé ce que je veux pour la première liste :
    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
     
    Private Sub NomClient_Resultat_NotInList(NewData As String, Response As Integer)
     
    'Désactive l affichage des messages système
    DoCmd.SetWarnings False
     
    'Met à jour la table Elevage avec la nouvelle donnée NewData
    DoCmd.RunSQL "INSERT INTO Client ( [Client] ) SELECT " & NewData & " AS Expr3;"
     
    'Met à jour la zone de liste déroulante
    Me.NomClient_Resultat.RowSource = "SELECT Client.[Client] FROM Client; "
     
    'Intercepte l'erreur et l'inhibe
    Response = acDataErrContinue
     
    'Active l affichage des messages système
    DoCmd.SetWarnings True
     
    End Sub
    Le seul problème c'est que de cette façon l'utilisateur doit rentrer deux fois la valeur ...

    Ensuite, j'ai répété la même chose pour ma seconde liste :
    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
     
    Private Sub NumAffaire_Texte_NotInList(NewData As String, Response As Integer)
     
    'Désactive l affichage des messages système
     DoCmd.SetWarnings False
     
    'Met à jour la table Elevage avec la nouvelle donnée NewData
     DoCmd.RunSQL "INSERT INTO Lancements ( [NumAffaire] ) SELECT " & NewData & " AS Expr1;"
     
    'Met à jour la zone de liste déroulante
     Me.NumAffaire_Texte.RowSource = "SELECT Lancements.[NumAffaire] FROM Lancements;"
     
    'Intercepte l'erreur et l'inhibe
     Response = acDataErrContinue
     
    'Active l affichage des messages système
     DoCmd.SetWarnings True
     
     End Sub
    Cette fois avec le même code je n'entre qu'une seule fois la nouvelle valeur.
    Le problème c'est que lorsque ça me ré-affiche ma liste celle-ci apparait avec des valeurs invisibles (la liste a le nombre de ligne qu'il y a dans la table mais c'est comme si les valeurs étaient écrites en blanc).
    Les valeurs sont bien enregistrées dans la table correspondante ...
    Je ne comprends pas vraiment ce qui se passe ...

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    A la place d'un select dans l'insert, utilisez values

    Pour du numérique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO Client ( [Client] ) Values(" & NewData & ")"
    Pour du texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO Client ( [Client] ) Values(""" & NewData & """)"
    Il faut ajouter les guillemets autour d'une valeur pour un champ texte sinon c'est là sans doute qu'il redemande la valeur une deuxième fois.

    De plus, plutôt que de mettre à jour la liste en redéfinissant le Rowsource, utilisez acDataErrAdded au lieu de acDataErrContinue.
    La liste est mise à jour automatiquement avec acDataErrAdded.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Points : 76
    Points
    76
    Par défaut
    Merci pour ton aide

    J'ai essayé ce que tu m'as dis et c'est vrai que VALUES serait plus correct au niveau SQL.
    J'ai cependant une erreur de compilation en mettant VALUES à la place de SELECT ...
    La voici :

  4. #4
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par Petit Rasta Voir le message
    J'ai cependant une erreur de compilation en mettant VALUES à la place de SELECT ...
    l'erreur de syntaxe est due à une mauvaise syntaxe...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Points : 76
    Points
    76
    Par défaut
    J'ai essayé de changer ma table client car celle que j'utilisais était une table liée.
    J'ai donc fait une table client2 avec les mêmes propriétés et ça marche. J'ai également remis un SELECT à la place du VALUES.

    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
     
    Private Sub NomClient_Resultat_NotInList(NewData As String, Response As Integer)
     
    'Désactive l affichage des messages système
    DoCmd.SetWarnings False
     
    'Met à jour la table Elevage avec la nouvelle donnée NewData
    DoCmd.RunSQL "INSERT INTO Client2 ( [Client] ) VALUES """ & NewData & """ AS Expr3;"
     
    'Met à jour la zone de liste déroulante
    Me.NomClient_Resultat.RowSource = "SELECT Client2.[Client] FROM Client2; "
     
    'Intercepte l'erreur et l'inhibe
    Response = acDataErrAdded
     
    'Active l affichage des messages système
    DoCmd.SetWarnings True
     
    End Sub
    Pour les deux autres j'ai des problèmes différents ...
    Pour ma liste N°DAS :
    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
     
    Private Sub N°DAS_Texte_NotInList(NewData As String, Response As Integer)
    'Désactive l affichage des messages système
    DoCmd.SetWarnings False
     
    'Met à jour la table Elevage avec la nouvelle donnée NewData
    DoCmd.RunSQL "INSERT INTO DAS (NumDAS) SELECT """ & NewData & """ ;"
     
     
    'Met à jour la zone de liste déroulante
    Me.N°DAS_Texte.RowSource = "SELECT DAS.[N°DAS] FROM DAS; "
     
    'Intercepte l'erreur et l'inhibe
    Response = acDataErrAdded
     
    'Active l affichage des messages système
    DoCmd.SetWarnings True
     
    End Sub
    Capture d'écran :




    Le plus dingue c'est que ça me rajoute bien qu'une seule fois la valeur 66 dans ma table !

    Et pour finir :

    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
     
    Private Sub NumAffaire_Texte_NotInList(NewData As String, Response As Integer)
     
    'Désactive l affichage des messages système
     DoCmd.SetWarnings False
     
    'Met à jour la table Elevage avec la nouvelle donnée NewData
     DoCmd.RunSQL "INSERT INTO Lancements ( [NumAffaire] ) SELECT """ & NewData & """ AS Expr1;"
     
    'Met à jour la zone de liste déroulante
     NumAffaire_Texte.RowSource = "SELECT Lancements.[NumAffaire] FROM Lancements;"
     
    'Intercepte l'erreur et l'inhibe
     Response = acDataErrAdded
     
    'Active l affichage des messages système
     DoCmd.SetWarnings True
     
     End Sub
    Avec avant de saisir les données une liste de valeurs invisibles ...



    Là aussi les valeurs sont bien enregistrées dans la table.
    Cependant j'ai un message qui me dit que la valeur n'est pas dans la liste.

    J'oubliais : si je met VALUES comme tu me l'as dis et comme ça ce fait en SQL j'ai une erreur de syntaxe ... J'ai regardé dans l'aide Microsoft et je ne vois pas où est le problème.
    http://office.microsoft.com/fr-fr/ac...322451036.aspx

    Le Select est apparemment pour insérer plusieurs valeurs.

  6. #6
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    il faudrait essayer sans le "rowsource = ..."
    il n'est pas nécessaire de redéfinir la source, elle est déjà dans la propriété de la liste et acDataErrAdded demande de recharger la liste

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 200
    Points : 76
    Points
    76
    Par défaut
    Je ne vais pas crier victoire trop vite mais il semblerait que ça marche !!!!!

    J'ai quand même du recréer un champ liste parce qu'apparemment le problème d'invisibilité des valeurs venait de là.
    Me reste à régler le problème de la table liée, mais on ne peut peut-être pas ajouter des valeurs à une table liée si on la récupère d'une autre base ...

    En tout cas merci à toi pour ton coup de main !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/12/2012, 15h46
  2. [MySQL] Comparer le contenu d'une variable aux valeurs contenues dans une table
    Par mmlio dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/10/2009, 17h20
  3. Réponses: 2
    Dernier message: 11/05/2009, 09h36
  4. Réponses: 3
    Dernier message: 07/04/2008, 14h51
  5. Réponses: 2
    Dernier message: 09/11/2006, 09h59

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