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 :

Requête ajout qui fait des siennes ! [AC-2007]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut Requête ajout qui fait des siennes !
    Bonjour à toutes et tous,

    voilà ma situation:
    J'ai dans un formulaire une case à cocher qui déclenche entre autre une runSQL insert into mais celle-ci m'ajout en plus de l'enregistrement qui va bien un autre enregistrement avec des champs vides !
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cloturerbc_Click()
    DoCmd.RunSQL "Insert into Table_Lavages (N°_BC_Client,id_véhicule,Type_Lavage,Date_Lavage,Durée,Facturé,Prix_HT)Values(N°_BC_Client,id_véhicule,Type_Lavage,BC_Date,Durée,Facturé,Prix_HT)"
    DoCmd.Close acForm, ("Frm_pour_saisie_lavage")
    DoCmd.OpenForm ("Frm_Visu_Lavages"), acNormal, , , , acFormReadOnly
    End Sub
    certaines valeurs sont saisies manuellement: Durée,Facturé,Prix_HT
    les autres sont issues directement d'une table.
    Le formulaire contenant ces champs et cette case à cocher est de type:
    Feuille rép.dyn.(MAJ globale) avec extraction des paramètres par défaut
    il est filtré sur chargement.
    La case à cocher vient déclarer le Bon de commande clôturé dans la Table_Bons_De_Commandes ET ajoute le lavage à la Table_Lavages.

    Rien de compliqué mais y a une ligne de trop et je ne comprends pas ou j'ai fais l'erreur, pour mieux visualiser la chose je joins 2 screen copy:





    Merci d'avance pour votre aide et @ bientôt.
    Laurent.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Le formulaire est-il indépendant ou a une source??

  3. #3
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut Requête ajout qui fait des siennes !
    Laurentz bonjour,

    Comme le dit madefemere, si ton formulaire est lié à la source de données il est fort probable que l'enregistrement situé sous le formulaire est en mode ajout avec création d'une ligne vide !

    En injectant tes données grâce à ta requête, il te crée deux enregistrements !

    Pour en être sûr, modifie ton code en commentant ta ligne d'insertion et vérifie la table (tu devrais avoir une ligne vierge et qui prouve que le problème ne vient pas de ta fonction). Dans ce cas 2 solutions :

    1. modifier le mode d'ouverture de ton formulaire en interdisant l'ajout de données.
    2. Ne pas spécifier de sources de données et travailler sur un formulaire vierge avec des champs indépendants !

    Tiens nous au courant !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Salut,

    Citation Envoyé par madefemere Voir le message
    Bonjour,

    Le formulaire est-il indépendant ou a une source??
    le Formulaire a comme source la Table_Bons_de_Commandes.
    L'outil Dépendances d'objet me confirme qu'il dépend de
    la Table_Lavages ET de la Table_de_Commandes.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par jimbolion Voir le message
    Laurentz bonjour,

    Comme le dit madefemere, si ton formulaire est lié à la source de données il est fort probable que l'enregistrement situé sous le formulaire est en mode ajout avec création d'une ligne vide !

    En injectant tes données grâce à ta requête, il te crée deux enregistrements !

    Pour en être sûr, modifie ton code en commentant ta ligne d'insertion et vérifie la table (tu devrais avoir une ligne vierge et qui prouve que le problème ne vient pas de ta fonction). Dans ce cas 2 solutions :

    1. modifier le mode d'ouverture de ton formulaire en interdisant l'ajout de données.
    2. Ne pas spécifier de sources de données et travailler sur un formulaire vierge avec des champs indépendants !

    Tiens nous au courant !
    Ha ! j'ignorai qu'un truc pareil pouvait s'y glisser.
    Bon, si j'comprends bien pour faire un test il me faut transformer la ligne de code d'insertion en commentaire donc ajouter ' au début.
    effectivement mon formulaire contenant tout ces champs autorise l'ajout de donnée je modifie déjà ça pour voir le comportement.

    merci à vous deux
    je donne suite.

    Laurent.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Hello,
    Je confirme qu'avec la ligne de code qui lance la SQL insert into en simple commentaire, un ajout d'enregistrement partiellement vide se fait.
    j'ai donc aussi supprimé la source mais là évidement je me retrouve
    avec des champs sans référence "#Nom ?" dans mon Frm_pour_saisie_lavage pour les champs: N°_BC_Client , id_véhicule , Durée , Prix_HT.
    il me faut récupérer les données d'une manière ou d'une autre à ce niveau de la saisie.

    *******
    Bon après plusieurs essais (je n'dirai pas combien) je me retrouve toujours avec un enregistrement en partie vide supplémentaire et ça même en neutralisant ma SQL Insert Into !!
    je n'comprends pas pourquoi le fait de saisir manuellement mes 3 pauvres champs: Durée , Facturé , Prix_HT suivi d'une MAJ par F5 suffit à ajouter un enregistrement ne comportant évidement que les données saisie manuellement dans ma Table_Lavages, Surtout en n'ayant pas autorisé l'ajout dans les propriétés du formulaire.

    @+
    Laurent.

  7. #7
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut Laurentz
    Tu n'as aucun intérêt à utiliser un Insert avec une source de données (dans ce cas c'est access qui gérera l'insertion en base !)

    Dans ton cas, tu redondes l'écriture d'ajout 'celle faite par access + la tienne).

    Si tu veux utiliser l'insert pas de source et utilises des champs indépendants sans liaison avec ta source !

    A bientot,

    JimboLion

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Oui effectivement j'en ai déduis la même chose sauf que, avec des champs indépendants sans liaison je ne récupère pas les données à inclure dans mon nouvel enregistrement, du moins j'ai pas trouvé l'astuce.
    Un requery suffirait à l'ajout du nouvel enregistrement si je comprends bien.

  9. #9
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut Laurentz
    Re-bonjour,

    A l'ouverture de ton formulaire la fiche de saisie est t'elle déjà chargée ?
    Dans ce cas tu dois avoir au moins un id référencé (différent de Null) !

    Si ce formulaire est chargé avec une source de données et que l'utilisateur renseigne les informations (en mode modification), le simple requery ou fermeture du formulaire devrait t'actualiser la page ! Dans ce cas là commente ta ligne et regarde ce que cela donne !

    @++

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par jimbolion Voir le message
    Re-bonjour,

    A l'ouverture de ton formulaire la fiche de saisie est t'elle déjà chargée ?
    Dans ce cas tu dois avoir au moins un id référencé (différent de Null) !

    Si ce formulaire est chargé avec une source de données et que l'utilisateur renseigne les informations (en mode modification), le simple requery ou fermeture du formulaire devrait t'actualiser la page ! Dans ce cas là commente ta ligne et regarde ce que cela donne !

    @++
    Non, à l'ouverture du formulaire un filtre est appliqué, ce filtre est une requête qui me sélectionne le véhicule et son bon de commande en cours associé, me donne la date et le type de lavage.

    J'ai supprimé le lancement de la SQL Insert Into puisqu'elle fait double emploie.
    J'utilise donc la touche F5 pour l'instant après avoir modifié mes 3 valeurs restantes mais y a rien à faire, seules les données saisie au clavier se retrouvent dans mon nouvel enregistrement c.a.d [Durée] , [Facturé] , [Prix_HT] les 4 autres champs restent tristement vides.
    soit je n'comprends ce que tu veux m'expliquer (c'est pas impossible)
    soit j'ai pas donné assez d'info sur le process en amont.
    @+

  11. #11
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut Laurentz
    Il y a effectivement plusieurs façons de concevoir un formulaire et n'ayant pas ton projet, il n'est pas toujours évident pour moi de comprendre !

    Les 4 champs qui ne se mettent pas à jour sont t'ils indépendants (qu'à tu dans la propriété SourceControl) ?

    Dans ce cas reprendre ta requête et modifier ton insert par une requete de type update...


    @++

  12. #12
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut Laurentz,
    En regardant de nouveau ton formulaire je confirme mon message précédent !

    Un enregistrement est déjà crée puisque basée sur la source d'une table !
    Pour mettre à jour les champs saisis manuellement utilises un update en appliquant une condition where sur l'index unique qui caractérise ton lavage...

    En toute logique, il est tout à fait normal que tu aies 2 enregistrements en utilisant un Insert (le contraire aurait été anormal !!!!)

    @++

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Ok,

    En désespoir de cause j'avais remplacé dans la source du formulaire la table par une requête, je remets ça.

    Petite précision: l'enregistrement nouveau qui doit être ajouté à ma Table_Lavages contient des infos venant de 2 tables différentes,
    les champs [N°_BC_Client] , [BC_Date] , [id_véhicule] , [Type_Lavage] sont nourris par la Table_Bons_de_Commandes
    les champs [Durée] , [Facturé] , [Prix_HT] sont saisis manuellement.

    dans le principe, la table_Bons_de_Commandes est pour l'instant saisie à la main mais dans le futur il va falloir que ça se fasse à travers notre site web donc en ligne via un formulaire que le client remplira (là j'ai du taf aussi !).
    la Table_Lavages doit être automatiquement remplie pour éviter que des erreurs relatives aux noms de clients et autres numéros de BC et id véhicules s'y glissent.
    dans mon projet j'ai deux autres Tables qui sont elles entièrement nourries manuellement et en relation avec les autres, la Table_Clients et la Table_Véhicules.

    je me demande si le problème ne vient du fait que 2 sources différentes sont nécessaires à l'ajout/MAJ du new record.
    qu'en pense tu ?

    @+ et REmerci.....
    PS: suis pas au top avec access donc je galère c'est pas grave puisque j'aime ça mais je dois y arriver, c'est pour moi

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Bon !
    là j'arrive au bout de mes capacités mentales j'ai l'impression.
    j'ai essayé plein d'trucs mais sans succès
    et plus j'essaye moins j'comprends
    INCAPABLE de m'en sortir, je patauge dans l'potage !
    à votre bon <3 m'sieur dames.....

  15. #15
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut requete
    Laurentz,

    Reprenons à zéro... et calmement... tu vas voir c'est pas si compliqué !

    La source de données de ton formulaire c'est la table Bons_de_commande ou Table_Lavages ?

    Si tu me réponds Table_Lavages tu comprendras que tu as déjà un enregistrement qui correspond au lavage dans la table puisque celui-ci est filtré et affiché avant la saisie du bon de commande (jusque là pas de soucis...)

    En cochant ton bon de commande et sur l'évènement de ton bouton tu Inseres de nouveau un enregistrement dans ta table alors que tu devrait mettre à jour ton enregistrement avec la saisie du bon de commande ! Dans ce cas affiche sur ton formulaire le N° de table lavage et exécute un Update en passant comme condition le N° de la table_lavages !

    D'autre part dans l'évenement la fermeture et reouverture du formulaire çà sert à quoi ?

    Tiens moi au courant

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    ho t'as du courage toi !!! en tous cas merci beaucoup Alors,

    Déjà je précise que non à ce moment précis du process le lavage n'existe pas encore dans la Table_Lavages ou plutôt c'est le NewRecord, l'* mais il est vide.

    La source de mon formulaire Frm_pour_saisie_lavage est actuellement une Requête sélection avec mes 2 tables liées, la Table_Bons_de_Commandes et la Table_Lavages, c'est la seule façon que j'ai trouvé pour rassembler les champs dont j'ai besoin dans mon Frm_pour_saisie_lavage.

    Donc sur ce Form on retrouve les champs suivants:
    [N°_BC_Client] , [BC_Date] , [id_véhicule] , [Type_Lavage]
    l'idéal est que ces champs soit automatiquement saisis à partir de cette requête.
    ces champs existent aussi à l'identique dans ma Table_Lavages.
    dans ce formulaire j'y ai collé aussi 3 autres champs qui eux sont saisis manuellement pour des raison évidentes, [Durée] , [Facturé] , [Prix_HT]

    L'idée de base est générer un nouveau lavage dans la Table_Lavages évidement, qui reprendra les champs du Frm_pour_saisie_lavage et en même temps de clôturer le BC dans la Table_Bons_de_commandes.

    Y a forcément un truc que je n'comprends pas et ça m'énerve de pas savoir lequel.

    un screen copy de la requete:


    Merci
    Laurent.

  17. #17
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonsoir,

    Je te conseille de lire beaucoup plus sur les fonctionnement des objets d'Access et les bases de données car tu es entrain de te mélanger les pinceaux et perdre du temps dans ton projet.

    1 - Normalement, les informations devraient être uniques dans une base de données, donc avoir 3 champs ([N°_BC_Client] , [id_véhicule] , [Type_Lavage]) dans 2 tables différentes effectivement te conduit vers des difficultés lors de l'encodage. Normalement les relations servent à retrouver les informations dans plusieurs tables. Donc normalement, tu ne devrais pas avoir les champs [id_véhicule] , [Type_Lavage] que dans une des tables (sauf contrainte de conception).

    2 - Dans Access, on n'a pas besoin d'enregistrer les données. Ils sont dans la base à partir du moment où on passe à l'enregistrement suivant. Que ce soit dans une table ou un formulaire avec une source.

    3 - Dans un formulaire indépendant (sans source), tu peux créer une zone de liste qui dépend d'une table ou d'une requête (On s'en sert beaucoup pour limiter les possibilités de saisie de données).

    Si tu veux utiliser ton code pour ajouter tes données, la marche serait :

    1 - Un formulaire indépendant, sans source.
    2 - Une zone de liste déroulante (à 4 colonnes) avec comme contenu le N° du bon de commande correspondant et les 3 champs à partir de la table Bon de commande.
    3 - Tu peux ajouter 3 zones de textes avec comme source =ZonedeListe.column(i) i = 1 à 3 pour voir les valeurs rattachées à ton bon de commande.
    4 - Les 3 autres champs où la saisie se fait à la main.

    Comme cela avec ta case à cocher Clôturer Bon de commande, tu peux ajouter les valeurs contenues dans tes 7 champs dans ta table.


    On reste à l'écoute de ton évolution.
    Bonne continuation.

  18. #18
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut Laurentz
    Je regarde ton post dès demain et te tiens au courant !

    Jimbolion

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Ouais je sais j'ai une fâcheuse tendance à me compliquer la vie des fois !!
    Cela dit, j'ai du bol de ne pas avoir de contrainte de conception puisque je développe mon propre outil pour mon activité pro et j'en serai l'un des deux utilisateurs dans un premier temp, ça me permet aussi d'étudier toutes propositions quitte à repartir de zéro et tout modifier.
    J'vais réfléchir sérieusement à ta remarque, peut être que je pars dans le mauvais sens.
    1. Je vais effectivement retravailler la structure en supprimant la redondance de certains champs sur l'ensemble de mon outil qui devra gérer aussi le matériel et le personnel.
    2. Ça j'avais en tenir compte pour les modifs à venir.

    Merci de m'avoir ouvert les yeux, je me remets au boulot, l'activité démarre mi Février......
    @plus
    Laurent.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par jimbolion Voir le message
    Je regarde ton post dès demain et te tiens au courant !

    Jimbolion
    Ok merci jimbolion,

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. un label qui fait des sienne
    Par liliputien2002 dans le forum Tkinter
    Réponses: 3
    Dernier message: 10/09/2008, 16h49
  2. e8500 qui fait des siennes
    Par sliderman dans le forum Composants
    Réponses: 2
    Dernier message: 14/08/2008, 20h34
  3. Ma fonction "Recherche" qui fait des siennes
    Par nicolas2603 dans le forum VBA Access
    Réponses: 0
    Dernier message: 16/01/2008, 18h27
  4. [XHTML] XHTML -> IE qui fait des siennes!
    Par onet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 20/03/2007, 22h50
  5. Pop up qui fait des siennes !
    Par Sandara dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 13/06/2006, 17h40

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