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 :

[strategie] Cloner un enregistrement


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut [strategie] Cloner un enregistrement
    Bonjour à tous,

    En fait, j'aurais besoin d'avis éclairés, j'ai l'impression de pas forcément suivre la bonne route pour obtenir ce que je veux ...

    J'ai un formulaire "client". une fois le client créé, je peux lui créer un contrat. Une fois le contrat créé je peux modifier le contrat. Si je modifie le contrat, la verison précédente du contrat doit etre conservé.

    Donc quand je suis dans mpon formulaire client, quand je clique pour modifier son contrat, je dois pouvoir récupérer la derniere version du contrat, et la cloner dans un formulaire "contrat" pour récupérer les infos et laisser l'utilisateur modifier ce qu'il doit modifier. Du coup, une fois validé, j'ai l'ancienne et la nouvelle version du contrat stocké....

    Dans ce processus, récupérer la dernier verison du contrat, ca me pose pas de probleme ...

    Mais par contre, ouvrir un formulaire qui contient des informations d'un enreg mais dupliqué dans un nouvel enregistrement, j'y arrive pas...

    Qq un peut m'aider ???

    Merci d'avance

    J'espere avoir été clair ... j'en ai peut etre torp dit ...

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    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 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Il te faut une table TBLClients et une table TBLContrat.
    - Dans TBLClients est définit IDClient comme Clé primaire
    - Dans TBLContrat est définit IDContrat comme Clé primaire
    - Dans TBLContrat est définit IDClient comme Clé étrangère

    Pour chaque client existe un ou plusieurs contrats selon une date par exemple.
    Ca c'est la structure. Il te faut en suite coder dans tes formulaires les différentes possiblités d'accèder à la version précédente du contrat donc de l'afficher comme nouvel enregistrement dans ton formulaire et ainsi de suite pour chaque nouvelle mise à jour du contrat. La "difficulté" réside dans le fait qu'il faut interdire l'accès aux versions précédentes, donc supprimer certains effets de comportement, les boutons de navigation, la molette de la souris etc... Tout cela se génère par code VBA sans problème.

    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
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Merci pour ta réponse !

    En fait mon probleme réside simplement dans le fait de pouvoir ouvrir un formulaire de saisie du contrat dans lequel j'aurais cloner le contrat précédent ...
    J'ai vu qu'il y avait un bouton "dupliquer enregistrement" dans l'asisstant bouton, mais qui ne fonctionne pas ...
    Y a bien l'option suivante :
    Sur ouverture du formulaire de modification du contrat, j'ouvre un recordset avec tous les contrats correspondant au client, je me place sur le dernier en date, je créé un nouvel enregistrement dans mon formulaire, je copie les données de l'enregistrement du recordset dans les champs correspondants dans le formulaire, et hop ...

    Mais bon, ca me semble lourd ... Ma quesiton etait en fait de savoir si y vait pas plus léger ?

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    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 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Oui, il y a plus simple...
    Pour un client donné, tu as un N° de contrat et un compteur non automatique.
    La clé primaire de la table Contrats doit alors avoir la double clé IDContrat / IDClient ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    IDCLient/IDContrat
    ----------------------
    CLI0001/ 1
    CLI0001/ 2
    CLI0002/ 1
    CLI0002/ 2
    CLI0002/ 3
    CLI0003/ 1
    etc...
    De ce fait, avec une requête, tu fait un SELECT MAX de IDContrat selon un critère fondé sur IDCLient et de là tu peux créer un nouveau contrat fondé sur la version précédente du contrat.

    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
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Ouais mais c'est plus l'aspect duplication qui me pose probleme ...

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    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 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Je me doute bien
    Mais j'hésite à te mâcher le travail en fait... Hummmm ???

    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
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  7. #7
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    lol ... Je comprend bien ... Je veux pas te faire faire mon taf ...

    En fait, je veux juste un avis sur ma facon de faire ...

    Pour moi, une fois récupéré l'id de la derniere verison du contrat, j'ouvre un formulaire de saisie, sur l'evenement d'ouverture de ce formulaire, je récupere l'enregistrement correspondant à la derniere version du contrat, et je plaque une par une les données dans les champs correspondants.

    Ce qui me gene c la fin, ca me parait etre de la bidouille a deux balles ... Donc si tu pouvais juste me donner ton avis la dessus, promis, je t'embeterai plus apres !!!

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    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 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bon, c'est noël...
    Tu peux partir d'une base comme ça (c'est bien entendu à peaufiner)

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Private Sub ModifierAjouterContrat(ByVal IDClient As Long)
    Dim SQLTrouverContrat As String
    Dim SQLContrat As String
    Dim strInfoContrat1 As String
    Dim strInfoContrat2 As String
    Dim strInfoContrat3 As String
    Dim strInfoContrat4 As String
    Dim strInfoContrat5 As String
    Dim lngContratCorrespondant As Long
     
    Dim oRSContrat As Recordset
    Dim oRSNouveauContrat As Recordset
     
      SQLContrat = "SELECT * FROM TableContrat"
      SQLTrouverContrat = SQLContrat & " WHERE IDCLient = " & IDClient
      Set oRSContrat = CurrentDb.OpenRecordset(SQLTrouverContrat, 2)
      'Si n'existe pas
      If oRSContrat.EOF Then
        'Créé un nouveau contrat N°1 donc.
        With oRSContrat
          .AddNew
          .Fields("IDClient") = IDClient
          .Fields("IDContrat") = 1
          .Update
        'Ferme le Recordset
          .Close
        End With
        'Ouvre le formulaire
        DoCmd.OpenForm "frmContratClient", acNormal, , "[IDClient]=" & IDClient, acFormEdit, acDialog
      'Sinon
      Else
        'Affecte le N° de contrat trouvé correspondant et ajoute 1
        lngContratCorrespondant = oRSContrat.Fields("IDContrat") + 1
        'Affecte les infos trouvés aux variables
        strInfoContrat1 = oRSContrat.Fields("strInfoContrat1")
        strInfoContrat2 = oRSContrat.Fields("strInfoContrat2")
        strInfoContrat3 = oRSContrat.Fields("strInfoContrat3")
        strInfoContrat4 = oRSContrat.Fields("strInfoContrat4")
        strInfoContrat5 = oRSContrat.Fields("strInfoContrat5")
        '[..... ]
        'Créé un nouveau contrat
        Set oRSNouveauContrat = CurrentDb.OpenRecordset(SQLContrat, 2)
        With oRSNouveauContrat
          .AddNew
            .Fields("IDClient") = IDClient
            .Fields("IDContrat") = lngContratCorrespondant
            'Affecte les infos trouvées aux différents champs
            .Fields("strInfoContrat1") = strInfoContrat1
            .Fields("strInfoContrat2") = strInfoContrat2
            .Fields("strInfoContrat3") = strInfoContrat3
            .Fields("strInfoContrat4") = strInfoContrat4
            .Fields("strInfoContrat5") = strInfoContrat5
            '[..... ]
          .Update
          .Close
        End With
        'Ferme le Recordset
        oRSContrat.Close
        'Ouvre le formulaire
        DoCmd.OpenForm "frmContratClient", acNormal, , "[IDClient]=" & IDClient & " AND [IDContrat]=" & lngContratCorrespondant, acFormEdit, acDialog
      End If
      'Detruit les objets
      Set oRSContrat = Nothing
      Set oRSNouveauContrat = Nothing
    End Sub
     
    Private Sub Test()
    Dim lngClientEnCours As Long
      lngClientEnCours = Me!IDClient
      ModifierAjouterContrat lngClientEnCours
    End Sub
    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
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  9. #9
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Ah ouais .... La en effet, tu me maches le travail ... En fait, j'avais juste besoin que tu valides mon processus !! En tout cas, ca valide mon processus, je pensais qu'il y avait eventuellement plus simple, apparemment non ...

    Merci beaucoup en tout cas !!!

    Passe de bonnes fetes !!! 8)

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

Discussions similaires

  1. Strategie d'enregistrement des données
    Par BRAUKRIS dans le forum Flex
    Réponses: 1
    Dernier message: 17/11/2008, 14h32
  2. Cloner un enregistrement
    Par Stéphane Olivier BERNARD dans le forum VBA Access
    Réponses: 5
    Dernier message: 08/11/2007, 10h25
  3. [VB][rdo] Strategie de suppression massive d'enregistrements
    Par Bicky dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 12/10/2005, 14h12
  4. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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