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 :

[Access 2000] Zone de liste modifiable: problème de mise à jour avec la valeur nulle


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 37
    Points
    37
    Par défaut [Access 2000] Zone de liste modifiable: problème de mise à jour avec la valeur nulle
    Bonjour,

    J'ai une zone de liste modifiable contenant 2 colonnes dont la première est de longueur nulle pour que seule la deuxième colonne soit visible. La zone de liste modifiable est liée à la première colonne qui est cachée.

    Mon problème intervient lorsque que je souhaite attribuer la valeur nulle (depuis le formulaire, pas depuis VBA) à la zone de liste modifiable: j'ai remarqué qu'avec une suite d'actions particulière (effacement caractère par caractère de la valeur avec la touche backspace et perte de focus par click de souris sur un autre contrôle), la valeur n'est pas mise à jour à la valeur nulle mais revient à l'ancienne valeur.

    D'après les tests que j'ai effectué, ce problème n'apparaît que lorsque la colonne liée est cachée (longueur nulle). D'ailleurs, si on utilise une autre suite d'actions (effacement de la valeur en sélectionnant tout les caractères, perte du focus par appui de la touche Enter ou Tab...) la valeur est bien mise à jour à la valeur nulle.

    Y a-t-il un moyen propre de résoudre ce problème?

    J'ai essayé la méthode suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Modifiable_BeforeUpdate(Cancel As Integer)
        If Modifiable.Text = "" Then Modifiable.Value = Null
    End Sub
    Mais dans ce cas Access me retourne l'erreure suivante:
    Erreur d'exécution '2115':
    La macro ou fonction attribuée à la propriété Avant MAJ ou Valide si pour ce champ empêche Microsoft Access d'enregistrer les données dans le champ.
    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Bonjour,

    là vraiment je n'ai pas bien compris ce que tu veux faire.

    Citation Envoyé par vcattin
    Mon problème intervient lorsque que je souhaite attribuer la valeur nulle (depuis le formulaire, pas depuis VBA) à la zone de liste modifiable
    La zone de liste modifiable te sers à quoi? et par quel formulaire tu la mets à jour?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 37
    Points
    37
    Par défaut
    En fait, j'ai une liste modifiable qui sert simplement à récupérer des données de l'utilisateur. J'aimerais que dans cette liste modifiable l'utilisateur puisse entrer la valeur nulle, pas seulement les valeurs qui sont proposées par la liste. Je sais que c'est possible tout simplement en ne tapant rien ou en ne sélectionnant aucune valeur. Le problème survient lorsque la zone de texte de la liste modifiable contient déjà une valeur et que l'utilisateur veut l'effacer avec la touche backspace comme indiqué dans le précédent post.

    J'espère que je suis assez clair...

  4. #4
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Bonjour,

    Citation Envoyé par vcattin
    En fait, j'ai une liste modifiable qui sert simplement à récupérer des données de l'utilisateur.
    Je ne comprends toujours pas quelle donnée et pour en faire quoi?
    pour quelle raison rentrer la valeur "nulle". dans ton cas tu as une zone de liste avec 2 colonnes. une liée et cachée et une autre visible. Donc c'est impossible à un utilisateur de taper du texte pour entrer une valeur nulle. Si c'est ce que tu veux il te faut mettre la valeur "nulle" dans ta liste en valeur cachée. Peut être avec une requête union.

    met peutêtre aussi une image de ton formulaire
    A+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 37
    Points
    37
    Par défaut
    En fait j'ai une zone de liste modifiable contenant le titres que peut avoir une personne (par exemple: 'Monsieur','Madame','Docteur'...). Les éléments que contient la liste sont extraits d'une table Titre. La table Titre contient plusieurs colonnes mais seules dont sont extraites pour la zone de liste: l'une contient l'index du titre (NuméroAuto) et l'autre le titre lui-même.

    Le problème c'est que j'aimerais pouvoir rentrer une valeur nulle (chaîne vide) pour le titre lorsque l'on a par exemple une entreprise au lieu d'une personne. C'est là que survient mon problème.

    J'ai joint une petite image montrant la zone de liste.

    Alexandre, si tu as une idée pour la requête union que tu propose, je suis preneur...

    J'espère avoir été plus clair...
    Images attachées Images attachées  

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par vcattin
    Bonjour,
    Erreur d'exécution '2115':
    La macro ou fonction attribuée à la propriété Avant MAJ ou Valide si pour ce champ empêche Microsoft Access d'enregistrer les données dans le champ.
    C'est trés explicite. Regarde dans les propriétés de ta liste s'il ya des valeurs non admises. De même regarde aussi les évenemets associés à ta liste.
    Amicalement

  7. #7
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Bonjour,

    merci de ces explications qui sont maintenant très claires.

    Si ta zone de liste est basée sur une table c'est assez facile.
    Tu mets dans ta table une ligne avec comme valeur une chaîne vide.
    T_Titre

    1 Monsieur
    2 Madame
    3 ""( ici la chaîne vide)

    La question est maintenant de savoir comment est construite ta BD.
    Question: est-ce que la table titre est liée avec la table adresse ?

    Dans l'autre cas si tu utilises ta zone de liste pour introduire le titre en chaîne texte dans ton champ, il te faut poser la question veux tu une valeur "nulle" ou une chaîne vide dans ton champs?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 37
    Points
    37
    Par défaut
    Finalement, j'ai réussi à résoudre le problème en testant la valeur de la zone de liste durant l'événement AfterUpdate au lieu de BeforeUpdate (voir le petit bout de code dans mon premier post) et ça marche!

    Je trouve tout de même que c'est un peu du bricolage... Comme je l'ai indiqué dans mon premier post, sans cette petite magouille, le comportement de ma zone de liste lorsqu'on entre une chaîne vide est assez imprévisible! Serait-ce un bug d'Access 2000?

    À Alexandre: j'ai essayé ton idée, mais malheureusement ça ne change rien... La table Titre est effectivement liée, mais avec la table Client et non la table Adresse. C'est la valeur nulle que je souhaite utilisée et non la chaîne vide (quoique, c'est pas si important).

    Même si ma solution me paraît pas idéale je considère mon problème comme résolu.

    Merci à tous les deux de votre aide!

  9. #9
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    vcattin

    ne pas baisser les bras.

    si ta table est liée à la table client ce n'est pas un problème. tu effactes ta table titre et tu recrée une table titre mais sans numéro auto
    puis tu fais

    N° description du titre
    1 Monsieur
    2 Madame
    null (aucun titre)

    etc. en faisant attention de bien prendre le même no pour chacun des titres puis tu relies ta nouvelle table avec celle du client et le tour est joué!

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    C'est tout simplement dû au fait qu'une chaine vide n'est pas une valeur nulle

    La solution d'une valeur tierce dans la table me parait dangereuse puisque si l'utilisateur supprime cette valeur, son programme ne fonctionnera plus.

    Non, il suffit tout simplement d'affecter la valeur NULL à la zone de liste

    MaListe=Null, par exemple avec un petit pouton à coté de la zone de liste, ou bien avec le menu contextuel, ou bien ...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 37
    Points
    37
    Par défaut
    Merci Tofalu,

    Je vais définitivement opté pour l'affectation de la valeur nulle à la liste. Plutôt que d'utiliser un bouton supplémentaire, je préfère capter la chaîne vide avec VBA et la "transformer" en valeur nulle. C'est peut-être un peu bricolé mais ça me paraît plus simple à l'utilisation. Si par la suite ça pose un problème, j'opterai pour une case à cocher à côté de la liste...

    Merci à tous

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

Discussions similaires

  1. [Core] Problème de mise à jour avec tables liées
    Par mithrendil dans le forum Hibernate
    Réponses: 11
    Dernier message: 06/07/2012, 15h32
  2. Problème de mise à jour avec utilisation de merge
    Par methodman225 dans le forum JPA
    Réponses: 1
    Dernier message: 01/06/2010, 11h26
  3. Réponses: 1
    Dernier message: 12/05/2007, 07h14
  4. Problème de mise à jour avec COUNT
    Par chacalito dans le forum Oracle
    Réponses: 2
    Dernier message: 16/10/2006, 11h08
  5. Réponses: 8
    Dernier message: 28/09/2006, 10h27

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