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

VBA Access Discussion :

Pb pour formulaire de modification.


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Par défaut Pb pour formulaire de modification.
    Bonjour,

    J'ai une base de donnée avec plusieurs table a relation multiple.

    Je voudrai afficher tous les champs d'un enregistrement dans un formulaire pour pouvoir les modifier.
    Par mes relations multiples, je ne peux pas faire directement ma requête sur toutes mes tables afin de les modifier.
    Je n'ai pas envie non plus de faire x sous formulaire car ca ne sera pas jolie et pratique.
    Je veux afficher mes données en feuille de données (comme pour une table).

    J'ai fais une premier formulaire ou on sélectionne une famille et le projet associé à la famille.
    Ensuite j'ai un autre formulaire qui s'ouvre ou on peux modifier des données rattachées au projet (ca pas de problème puisque les tables en question ne sont pas en relation multiple).
    Ensuite viens un autre formulaire une ou plusieurs catégorie qui permet ensuite d'ouvrir mon formulaire avec les données choisie par les filtre.

    Lors du passage du formulaire avec les filtre au formulaire de modification, les données sélectionnées par les filtre s'enregistre dans une table qui comporte tous les champs nécessaire à la modification.

    J'arrive donc à modifier ces données dans la nouvelle table.

    Ce que j'aimerai maintenant c'est mettre à jour les données dans les vrai tables.

    Pour cela il me faut les anciens enregistrement ainsi que les nouveau.
    J'avais pensé faire lorsqu'il clic sur le bouton "enregistrer et quitter" du form de modif:

    1) fermer le form pour qu'il enregistre les données dans la table temporaire.
    2) Faire 2 requêtes (une sur ma table temporaire pour avoir les modif, l'autre sur les vrai table pour avoir les anciennes données)
    3) je voulais ensuite modifier les vrai tables avec les valeurs de ma première requête en fonction des valeur de la seconde requête.

    Mais je ne sais pas si c'est la bonne méthode.
    Je ne suis pas sur que le premier enregistrement de ma requête1 et le même (hors modif) que le premier enregistrement de la requête 2.

    Si vous avez des idées sur la manière dont je dois m'y prendre ca m'aiderai bcp car la j'ai l'impression de faire n'importe quoi et plus j'y réfléchis plus je m'embrouille.

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Quel que soit le nombre de tables en relation, ton formulaire doit être attaché à sa table ou à sa requête si toutefois tu as besoin de critères spécifiques. Au pire, tu peux joindre une table de relation que tu juges indispensable mais au final, ça ne sert à rien.
    Ton formulaire possède alors tous les champs de la table en question et chaque contrôles nécessitant un choix se voit transformé en liste de choix ou déroulante pointant sur la table liée en rapport.
    Pour les autres relations, tu peux jouer avec les événements et renvoyer dans telle ou telle zone de texte, telle valeur correspondant à une entrée spécifique dans un autre contrôle ou encore selon une valeur cochéé dans un cadre d'options.

    Bref, un petit travail pointu mais fiable.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Par défaut
    Je te remercie pour ta réponse.
    Je vais y réfléchir.
    Enntre temps j'ai trouvé une solution qui n'est certainement pas parfaite mais qui marche (enfin j'ai encore quelque point a régler).
    J'ai créé une 2nd table temporaire comme la première mais qui n'est pas attaché au formulaire et qui donc n'as pas eu les modification.
    Grâce au positionnement des enregistrements, si ce sont les mêmes pour les 2 tables je peux modifier mes autres tables (celle que j' appelle les vrai).
    Voila mon code:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    sSQL = "SELECT * FROM Tbl_Modif_Data;"
     
        Set myrst = db.OpenRecordset(sSQL)
            If Not myrst.EOF Then
                Do While Not myrst.EOF
     
                   sSQL1 = "SELECT * FROM Tbl_Modif_Data_2;"
                    Set myrst1 = db.OpenRecordset(sSQL1)
                        If Not myrst1.EOF Then
                            Do While Not myrst1.EOF
                            If myrst.AbsolutePosition = myrst1.AbsolutePosition Then
     
     
     
                                    m0 = Replace(myrst.Fields("Montant_PCertu2").Value, ",", ".")
                                    m1 = Replace(myrst.Fields("Montant_PMOA2").Value, ",", ".")
                                    m2 = Replace(myrst.Fields("Montant_SP_Certu2").Value, ",", ".")
                                    m3 = Replace(myrst.Fields("Montant_Desig2").Value, ",", ".")
                                    m4 = Replace(myrst.Fields("Montant_SPMOA2").Value, ",", ".")
     
                                    sSQL = " UPDATE [Detail_Poste] SET ID_P = " & myrst.Fields("ID_P2").Value & ", ID_PMOA= " & myrst.Fields("ID_PMOA2").Value & ", Num_Certu= " & myrst.Fields("Num_Certu2").Value & ", Montant_PCertu= " & m0 & ", Montant_PMOA= " & m1 & " WHERE ID_P= " & myrst1.Fields("ID_P2").Value & " and ID_PMOA= " & myrst1.Fields("ID_PMOA2").Value & " and Num_Certu= " & myrst1.Fields("Num_Certu2").Value & ""
                                    DoCmd.RunSQL (sSQL)
     
                                    sSQL = " UPDATE [Detail_Poste_Certu] SET ID_SP_Certu=" & myrst.Fields("ID_SP_Certu2").Value & ",Num_Certu= " & myrst.Fields("Num_Certu2").Value & ", Montant_SP_Certu= " & m2 & " WHERE ID_SP_Certu= " & myrst1.Fields("ID_SP_Certu2").Value & " and Num_Certu= " & myrst1.Fields("Num_Certu2").Value & ""
                                    DoCmd.RunSQL (sSQL)
     
                                    sSQL = " UPDATE [Detail_SP_Certu] SET ID_SP_Certu=" & myrst.Fields("ID_SP_Certu2").Value & ", ID_Desig= " & myrst.Fields("ID_Desig2").Value & ", Montant_Desig= " & m3 & " WHERE ID_SP_Certu= " & myrst1.Fields("ID_SP_Certu2").Value & " and ID_Desig= " & myrst1.Fields("ID_Desig2").Value & ""
                                    DoCmd.RunSQL (sSQL)
     
                                    sSQL = " UPDATE [Detail_Poste_MOA] SET ID_PMOA=" & myrst.Fields("ID_PMOA2").Value & ",ID_SPMOA= " & myrst.Fields("ID_SPMOA2").Value & ", Montant_SPMOA= " & m4 & " WHERE ID_PMOA= " & myrst1.Fields("ID_PMOA2").Value & " and ID_SPMOA= " & myrst1.Fields("ID_SPMOA2").Value & ""
                                    DoCmd.RunSQL (sSQL)
     
                                    sSQL = " UPDATE [Detail_SP_MOA] SET ID_SPMOA=" & myrst.Fields("ID_SPMOA2").Value & ",ID_Desig= " & myrst.Fields("ID_Desig2").Value & ", Montant_Desig= " & m3 & " WHERE ID_SPMOA= " & myrst1.Fields("ID_SPMOA2").Value & " and ID_Desig= " & myrst1.Fields("ID_Desig2").Value & ""
                                    DoCmd.RunSQL (sSQL)
     
                                    sSQL = " UPDATE [Contient] SET ID_Desig=" & myrst.Fields("ID_Desig2").Value & ",ID_Data= " & myrst.Fields("ID_Data2").Value & ",CE= '" & myrst.Fields("CE2").Value & "',Etape= '" & myrst.Fields("Etape2").Value & "',Indice= '" & myrst.Fields("Indice2").Value & "' WHERE ID_Desig= " & myrst1.Fields("ID_Desig2").Value & " and ID_Data= " & myrst1.Fields("ID_Data2").Value & " and CE= '" & myrst1.Fields("CE2").Value & "' and Etape= '" & myrst1.Fields("Etape2").Value & "' and Indice= '" & myrst1.Fields("Indice2").Value & "'"
                                    DoCmd.RunSQL (sSQL)
     
                                    sSQL = " UPDATE [Data] SET Unité= '" & myrst.Fields("Unité2").Value & "',PU= " & myrst.Fields("PU2").Value & ",Qté= " & myrst.Fields("Qté2").Value & ",Peraleas= " & myrst.Fields("Peraleas2").Value & " ,Remarque= '" & myrst.Fields("Remarque2").Value & "',Offreur= '" & myrst.Fields("Offreur2").Value & "' WHERE ID_Data= " & myrst1.Fields("ID_Data2").Value & " and Unité= '" & myrst1.Fields("Unité2").Value & "' and PU= " & myrst1.Fields("PU2").Value & " and Qté= " & myrst1.Fields("Qté2").Value & " and Peraleas= " & myrst1.Fields("Peraleas2").Value & " and Remarque= '" & myrst1.Fields("Remarque2").Value & "' and Offreur= '" & myrst1.Fields("Offreur2").Value & "'"
                                    DoCmd.RunSQL (sSQL)
                                End If
                                    myrst1.MoveNext
     
                                 Loop
                            End If
                myrst.MoveNext
               Loop
        End If

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/06/2014, 19h53
  2. [AC-2000] Probléme pour enregistrer les modification d'un formulaire
    Par Flow56 dans le forum IHM
    Réponses: 1
    Dernier message: 07/09/2010, 08h17
  3. besoin d'aider pour formulaire de modification des données
    Par lesultan2007 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 29/08/2008, 18h41
  4. Réponses: 4
    Dernier message: 20/04/2005, 12h00
  5. [pgaccess] Script pour formulaire
    Par garou51 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/06/2003, 08h30

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