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

Access Discussion :

Requête d'insertion sur l'enregistrement ayant le focus dans un formulaire continu [AC-2007]


Sujet :

Access

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut Requête d'insertion sur l'enregistrement ayant le focus dans un formulaire continu
    Bonjour à tous,
    Je travaille en ce moment sur un formulaire de type continu et je ne parviens pas à afficher le résultat d’un calcul dans une textbox, à noter que ce résultat dépend de la saisie de l’utilisateur dans chacune des lignes (enregistrement) du formulaire.
    Je vais prendre un exemple simple pour illustrer mon problème.
    Mon formulaire comporte 2 listes déroulantes et 1 textbox :
    -lst_pays
    -lst_ville
    -txt_population

    Je précise que ces informations sont toutes disponible dans une table unique (Tb_info) et que le formulaire doit enrichir une nouvelle table différente (Tb_bilan) ce qui signifie que la source de donnée de tous les éléments est vide de contenu au départ.
    Lorsque l’utilisateur choisit un pays dans la première liste, la seconde liste des villes se met à jour (code sur événement « afterupdate »). Chaque ville a une population, et je voudrai que cette population apparaisse dans « txt_population, seulement il n’est pas possible de définir le contenu d’une textbox contrairement à une liste déroulante. Je rappelle que la source de la textbox fait référence à la table « Tb_bilan » et que l’info se trouve dans la table « Tb_info »
    Comment faire ? J’ai pensé à jouer sur la valeur par défaut mais ça ne marche pas
    La meilleur solution est sans doute de remplir la table « Tb_bilan » directement par une requête d’insertion qui s’ execute sur un événement afterupdate de lst_ville, mais comment faire cet ajout sur le bon enregistrement (celui qui a le focus) ?
    J’espère avoir été clair,
    Merci à ceux qui prendront la peine de me lire.

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour MatAllwhite,
    Je rappelle que la source de la textbox fait référence à la table « Tb_bilan »
    Donc ton sous formulaire est lié à la table Tb_bilan. Si c'est le cas il doit y avoir un ID pour cette ligne. En te servant de ce ID si tu veux faire une requête insertion sur l'événement after update de la liste ville. Ou plus simplement en incluant la population dans la liste ville (colonne cachée) et sur l'événement after update de la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.txt_population = me.lst_ville.Column(1)
    En supposant que la liste ville a une colonne nom et une colonne population.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Merci pour ton aide Robert1957,
    Effectivement mon formulaire est lié à la table Tb_bilan; Je n'avais pas pensé à rajouter une colonne caché dans la liste des villes: c'est une bonne idée.
    Je suis ravi, ta solution marche tres bien.

    Je ne ferme pas la discussion car cela va peut être résoudre également un autre problème un peu similaire que j'expérimente cet après-midi. Hors je risque d'avoir encore une question. Je fermerai la discussion si c'est bon.

    Merci beaucoup Robert1957

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Bon alors effectivement j'ai d'autres questions:
    1)Nous avons vu que j'ai rajouté le code suivant sur l'évenement "AfterUpdate de ma liste "lst_ville":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.txt_population = me.lst_ville.Column(1)
    Maintenant je voudrais aussi pouvoir créer moi même une ville (oui je suis comme ça moi, j'aime bien créer des villes! c'est pour illustrer évidemment); aucun problème il suffit de mettre la propriété "limiter à liste" sur "non" mais malheureusement mon code précédent fait planter.
    Comment dans le code vérifier qu'aucune ville présente dans la liste "lst_ville" n'a été sélectionner pour éviter d'executer la suite du code vue précédemment?
    J'ai tenté ça mais sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If me.lst_ville.InSelection = true then
    me.txt_population = me.lst_ville.Column(1)
    end if
    2) Autre problème plus complexe je pense, j'ai un 4 ieme élément dans mon formulaire continu: "lst_quartier" il s'agit d'une liste déroulante à choix multiple
    (avec des cases à cocher). Voici le fonctionnement: lorsque je sélectionne une ville, ma liste des quartiers qui la compose se met à jour (ça c'est bon, ça marche). Mais si j'ai cocher un quartier et que finalement je veux changer après de ville, la liste se remet à jour mais en conservant en plus le quartier précédemment séléctionné; ce qui est logique finalement. Mais comment retirer cet élément?
    On en revient donc encore une fois au sujet initial de la discussion, c'est à dire comment supprimer le "quartier" séléctionné de ma table tb_bilan pour que la liste des quartier soit réellement réinitialisé (autrement dit comment récuperer l'id de l'enregistrement ayant le focus et appliqué la requête de suppression sur cet enregistrement)? Je pense que je ne suis pas loin là.

    Merci à ceux qui liront ce pavé et qui répondront. Help!

  5. #5
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour MatAllwhite,
    Maintenant je voudrais aussi pouvoir créer moi même une ville
    Ça c'est impossible avec ce qui a été vu précédemment. En effet te ne peux alimenter la deuxième colonne donc tu te trouverais à créer une ville mais sans population.
    2) Autre problème plus complexe je pense, j'ai un 4 ieme élément dans mon formulaire continu: "lst_quartier" il s'agit d'une liste déroulante à choix multiple
    (avec des cases à cocher). Voici le fonctionnement: lorsque je sélectionne une ville, ma liste des quartiers qui la compose se met à jour (ça c'est bon, ça marche). Mais si j'ai cocher un quartier et que finalement je veux changer après de ville, la liste se remet à jour mais en conservant en plus le quartier précédemment séléctionné; ce qui est logique finalement. Mais comment retirer cet élément?
    Là tu n'as pas le choix il faut que tu récupères ce qui sert à identifier ta ligne, clé primaire de la table bilan, et faire un requête Update en VBA pour enlever le quartier précédemment choisi.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  6. #6
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Bonjour Robert et merci pour ton aide.
    1)
    Ça c'est impossible avec ce qui a été vu précédemment. En effet te ne peux alimenter la deuxième colonne donc tu te trouverais à créer une ville mais sans population.
    Je sais bien que ma deuxieme colonne ne sera plus alimenté, c'est justement l'appel de cette colonne en programmation qui fait planter le programme. En gros je veux pouvoir selectionner une ville dans une liste et voir apparaitre ça population dans une autre textbox, mais je veux aussi pouvoir créer ma ville et renseigner sa population manuellement. Il n'existe pas d'instruction VBA permettant de savoir si aucun élément d'une liste n'a été selectionné (afin de bloquer le programme vu précédemment)?
    2)
    Là tu n'as pas le choix il faut que tu récupères ce qui sert à identifier ta ligne, clé primaire de la table bilan, et faire un requête Update en VBA pour enlever le quartier précédemment choisi.
    Oui c'est ça que j'essai de faire justement, j'ai rajouté une textbox liée à l'ID de ma table Tb_bilan, et je récupère cet ID pour le mettre en condition dans une requête, mais je dois me planter quelque part dans la syntaxe ou alors ce n'est pas possible; voici l'erreur:
    Une requête UPDATE ou DELETE ne peut contenir un champ à plusieurs valeurs
    Hors justement le champs que je veux supprimer contient plusieurs valeur (je rapelle qu'il est alimenté par une liste déroulante à choix multiples , c'est une option possible depuis Access2007, j'ai donc bien plusieur "quartier" dans une même case que je voudrai réinitialisé.
    Voici ma requête au cas où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE Tb_Bilan.Population
    FROM Tb_Bilan
    WHERE (([Tb_Bilan]![ID]=[Formulaires]![nomDuFormulaire]![txt_ID]));

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Oups ! Autant pour moi je viens de trouver la bonne syntaxe ; qui est spécifique aux champs à plusieurs valeurs ; il faut rajouter « value » ; voici du coup ma requête si cela peut servir à certains :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE Tb_Bilan.Population.value
    FROM Tb_Bilan
    WHERE (([Tb_Bilan]![ID]=[Formulaires]![nomDuFormulaire]![txt_ID]));

    Bon sinon, ma première question sur mon message précédent est toujours valable :
    Quelle instruction VBA permet de savoir si un élément a été sectionné dans une zone de liste ?
    Je viens de me refaire toute la liste des instructions pour les zones de listes , mais je ne vois pas, et pourtant ça doit bien exister. Sinon va falloir que lancer une procédure un peu lourde qui parcours tout les élément de liste et la compare à la valeur dans la table......oulala je vais me perdre là.

  8. #8
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour ,
    Je sais bien que ma deuxieme colonne ne sera plus alimenté, c'est justement l'appel de cette colonne en programmation qui fait planter le programme.
    Remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.txt_population = Nz(me.lst_ville.Column(1),"")
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    ouhah, tu as réponse à tout Robert!
    Et à chaque fois la réponse est loin de ce que j'imaginais.
    Bon effectivement la fonction Nz ne fait plus planter le programme lorsque je ne choisi aucun élément dans la liste des villes (Tb_ville) mais curieusement la fonction me permet même d'écrire n'importe quoi, ce qui m'arrange bien.
    Par contre un 2ième probleme apparait, (même si je ne rentre rien à la place de la liste): impossible de renseigner l'enregistrement suivant du formulaire continu; voici le message d'erreur:
    Le moteur de base de données Microsoft Office Access ne peut pas trouver d'enregistrement dans la table "Tb_listeVille" avec le(s) champ(s) "vil_code" correspondant à la clé.
    Donc finalement Access n'est pas content!!! Il cherche désespérement une ville (vil_code) dans la liste......

    Je crois que je suis un peu mauvais

  10. #10
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour MatAllwhite,
    Le moteur de base de données Microsoft Office Access ne peut pas trouver d'enregistrement dans la table "Tb_listeVille" avec le(s) champ(s) "vil_code" correspondant à la clé.
    Je ne connais pas la structure de ta table mais je crois que c'est parce que tu crées un nouvel enregistrement et il te manque la clé qui est "vil_code". Donc on revient au point de départ, ne pas permettre l'ajout d'une ville dans ta liste déroulante étant donné que tu ne peux remplir les champs nécessaires par cette liste.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  11. #11
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Ok bon j'abandonne la modif des villes alors....
    Un grand merci malgré tout pour toutes ces infos

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

Discussions similaires

  1. [WD19] calculs sur les enregistrements d'une rupture dans un état
    Par elscorpio dans le forum WinDev
    Réponses: 3
    Dernier message: 14/11/2014, 14h19
  2. [Sencha Touch] Scroller sur le champ ayant le focus
    Par maxusn dans le forum Ext JS / Sencha
    Réponses: 5
    Dernier message: 28/06/2013, 10h11
  3. Réponses: 9
    Dernier message: 03/07/2012, 17h22
  4. Réponses: 6
    Dernier message: 23/05/2012, 16h54
  5. Réponses: 3
    Dernier message: 18/07/2006, 12h16

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