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 :

Dupliquer un enregistrement avec ses données liées


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Dupliquer un enregistrement avec ses données liées
    Bonjour à tous,
    j'aurais une petite question
    J'ai très longtemps parcouru les forums etc,... pour dupliquer un enregistrement contenu dans un formulaire contenant 2 sous-formulaires. J'ai fini par trouver un code que j'ai adapté à ma base. Mais ça ne duplique rien du tout
    voici 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
     
    Private Sub Commande137_Click()
    Dim rstessai As DAO.Recordset, rstessai2 As DAO.Recordset
    Dim Db As DAO.Database, fld As DAO.Field
    Dim sql As String
    Dim id As Long
    Set Db = CurrentDb
    'Ouvre le recordset où sera prélevé l'essai
    Set rstessai = Db.OpenRecordset("SELECT type_essai, site,type_produit, culture_code FROM essais WHERE num_essai= '" & num_essai & "';")
    'Verifie que le document 1 existe
    If rstessai.EOF Then Exit Sub
    'ouvre le recordset où sera ajouté l'essai
    Set rstessai2 = Db.OpenRecordset("essais")
    'Duplique le document
    With rstessai2
    .AddNew
    'duplique les champs
    For Each fld In rstessai.Fields
    .Fields(fld.Name) = fld.Value
    Next
    End With
     
    'Duplique les lignes
    sql = "insert into rapport (rap_num,rap_format_arm,rap_exigence_pau, rap_arrivée_pau) SELECT rap_num,rap_format_arm,rap_exigence_pau, rap_arrivée_pau FROM rapport WHERE rap_num= '" & num_essai & "';"
    Db.Execute sql
     
    End Sub
    Merci de m'éclairer si vous avez une idée

  2. #2
    Membre actif Avatar de psykodumarteau
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    A mon avis ton probleme vient de ton dernier SQL : tu ajoute des elements dans la table rapport or tu cherche les elements à ajouter dans la meme table. C'est donc normal que ton code ajoute rien.

    d'apres le debut du code tu stocke dans une table "essais" les elements à ajouter. Ton SQL doit donc cherche dans cette table les elements à ajouter à la table rapport

    Essaies-tu avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Duplique les lignes
    sql = "insert into rapport (rap_num,rap_format_arm,rap_exigence_pau, rap_arrivée_pau) 
    SELECT rap_num,rap_format_arm,rap_exigence_pau, rap_arrivée_pau FROM essais 
    WHERE rap_num= '" & num_essai & "';"
    Db.Execute sql
     
    End Sub

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Encore merci de votre aide
    j'ai testé, et ça me donne une erreur 3061 "trop peu de paramètres : 4 attendus, sur la ligne :
    Db.Execute sql

    mais en fait, les éléments que je veux copier dans rapports se trouvent dans le sous-formulaire, donc on ne peut pas les prendre dans la table essais.

    En fait : j'ai un formulaire ajout_essai contenant tous les éléments concernant l'essai, et un sous-formulaire contenant tous les éléments correspondant au rraport de l'essai.

    Et donc mon programme est censé dupliquer toutes les informations contenues dans le formulaire et dans le sous-formulaire.

    J'espère avoir été claire.

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Bonjour,

    Ce qui me saute aux yeux dans ton code, c'est qu'il y a un AddNew sans UpDate

    Essaie d'ajouter un .UpDate entre ton Next et ton End With. Sans cela, ton ajout d'enregistrement ne peut pas être validé.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    C'est fait, mais ça me donne : erreur '-2147352567 (80020009)' . Le champ 'essais.num_essai' ne peut pas contenir une valeur Null car la valeur de la propriété Required pour ce champ est True. Saisissez une valeur dans le champ.
    sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    num_essai = .Fields("num_essai")
    .Update
    Pourtant, dans le debogage, quand je me place dessus avec la souris, ça me met bien : num_essai = le numéro de l'essai

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Il faut que ton champ num_essai figure dans la clause SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rstessai = Db.OpenRecordset("SELECT num_essai,type_essai, site,type_produit...etc
    A ce moment-là, tu n'as même plus besoin de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    num_essai = .Fields("num_essai")
    ton For... Next étant suffisant

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Le problème c'est que si je duplique le num_essai, qui est la clé de ma table, ça me met : risque de doublons..... donc il ne le prend pas

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Alors il faut que tu génère toi-même la valeur de num_essai pour ton nouvel enregistrement. Cela dépend de la façon dont tes num_essais sont conçus (aléatoires, auto-incrémentés...)

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    c'est une valeur saisie par l'utilisateur
    je ne vois pas comment je peux faire

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Alors, si le nombre de caractères le permet, concatène quelque chose à droite de num_essai pour en créer un nouveau. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !num_essai = rstessai.Fields("num_essai").Value & " _Bis"

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    rolala!
    je suis completement perdue là!
    je ne vois pas du tout où ajouter ça!
    en fait, ce que je voulais faire, c'est dupliquer tout sauf ce numéro qui est la clé, car il sera modifié après, en fait, c'est le seul truc qui sera modifié.
    donc si je fais ce que tu m'as dit, l'utilisateur pourra quand meme le modifier après??
    je suis désolée mais je ne suis pas très douée avec toutes les histoires de recordset et tout ça
    Encore merci beaucoup de m'aider

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    bon ben finalement j'ai trouvé une autre solution
    ma table rapport avait une liaison 1 à 1 avec ma table essais, du coup, j'ai tout mis dans la table essais, ce qui fait que les données du rapport n'ont plus besoin d'être dans un sous-formulaire, et donc la duplication se fait directement avec le bouton proposé par access!
    voila!
    encore merci!

Discussions similaires

  1. [2008R2] Dupliquer un enregistrement avec table liée
    Par Piou2fois dans le forum Développement
    Réponses: 17
    Dernier message: 04/12/2013, 15h30
  2. [AC-2007] Créer un enregistrement avec des tables liées sur SQL Server
    Par NEfanda dans le forum Access
    Réponses: 2
    Dernier message: 29/04/2010, 20h31
  3. Dupliquer un clip avec ses fonctions.
    Par dialga dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 05/11/2008, 10h41
  4. Dupliquer un enregistrement avec modifications
    Par Nicouf dans le forum IHM
    Réponses: 7
    Dernier message: 17/09/2008, 12h25
  5. dupliquer un enregistrement dans un table liée
    Par RICHARDSEBIRE dans le forum Access
    Réponses: 9
    Dernier message: 24/02/2006, 12h57

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