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 :

Cloner un enregistrement


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 93
    Points : 90
    Points
    90
    Par défaut Cloner un enregistrement
    Bonjour,

    N'étant pas satisfait de la fonction de duplication d'enregistrements offerte par access (recopie de la clef primaire et recopie intégrale de tous les champs) je cherche à réaliser une fonction de clonage...
    Cette fonction doit être applelée par clic à partir du formulaire me permettant de visualiser tous les enregistrements.

    Cette fonction doit permettre d'eviter la copie de certains champs (grace à leur) numéro et doit permettre d'ecrire sur le nouvel enregistrement qu'il s'agit d'une copie d'un enregistrement existant (qui pourra ensuite être utilisé pour créer un nouvel enregistrement avec quelques modification mineures).
    Enfin, tout celà sonne bien mais mon code ne fonctionne pas...

    Alors si vous avez des iindications ou une idée plus simple...

    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
     
    Private Sub Clone_Click()
    Dim dbBaseDonnées As Database, recopie As Recordset
    Set dbBaseDonnées = DBEngine.Workspaces(0).Databases(0)
    Set recopie = dbBaseDonnées.OpenRecordset("Off", DB_OPEN_TABLE)
     
    Dim db As DAO.Database
    Dim rec As DAO.Recordset
     
    Set db = CurrentDb()
    Set rec = db.OpenRecordset("SELECT * FROM OFF WHERE [OffCod] = " & Forms!Off.[OffCod] & ";", dbOpenSnapshot)
     
    recopie.MoveLast
    recopie.AddNew
    rec.MoveFirst
      For i = 1 To (rec.Fields.Count - 1)
          Select Case i
           Case 2
           recopie!(rec.Fields(i)).Name = "Copie de la fiche " & rec.Fields(0).Value
           Case Else
           recopie!(rec.Fields(i)).Name = rec.Fields(i).Value
          End Select
      Next i
    recopie.Update
     
    recopie.Close
    Set recopie = Nothing
     
    rec.Close
    Set rec = Nothing
    Set db = Nothing
     
    End Sub
    PS Field(0) est sauté car c'est mon Id d'enregistrement (Num Auto).

    Merci d'avance

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Et un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Insert into .... 
    Select .... from ...
    Ca le fait pas ?
    [Access] Les bases du débogage => ici

  3. #3
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 881
    Points : 4 758
    Points
    4 758
    Par défaut
    Salut,
    ...
    recopie!(rec.Fields(i)).Name = rec.Fields(i).Value
    Et pourquoi ne pas écrire plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recopie.Fields(i) = rec.Fields(i)
    "Always look at the bright side of life." Monty Python.

  4. #4
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 93
    Points : 90
    Points
    90
    Par défaut Merci micniv !
    Finalement ça marche !?

    Merci pour la simplification de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recopie!(rec.Fields(i)).Name = rec.Fields(i).Value
    Vers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recopie.Fields(i) = rec.Fields(i)
    Si j'ai opté pour ce choix c'est parce que écrire tout les champs que je souhaitais recopier dans un requête était trop long...
    En plus comme ceux que je ne souhaite pas recopier sont en fin de table, une modification de "rec.Fields.Count - 1" en "rec.Fields.Count - X" me permet d'exclure les x-1 derniers champs...

    Je ne clos pas encore car un problème persiste. Eh oui, si je consulte ma table, un nouvel enregistrement (clone) est bien crée...
    Mais ce qui m'étonne c'est que le nombre d'enregistrements indiqué par les boutons de navigation ne s'incrémente pas lorsque le code s'exécute... Alors qu'un nouvel enregistrement est crée de même un movelast ajouté en fin de code ne me permet pas d'atteindre ce nouvel enregistrement sur lequel je souhaiterais être positionné dès sa création.

    Si quelqu'un voit pourquoi...

  5. #5
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 881
    Points : 4 758
    Points
    4 758
    Par défaut
    Salut

    Alors, sur ton form après ton UPDATE, il te faut faire un Voir l'aide.
    "Always look at the bright side of life." Monty Python.

  6. #6
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 93
    Points : 90
    Points
    90
    Par défaut OK ça marche !
    Merci Micniv !

    C'est marrant comme ça ce talant que j'ai de passer à coté des trucs relativement simple et de monter des usines à gaz

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

Discussions similaires

  1. [strategie] Cloner un enregistrement
    Par michaelbob dans le forum Access
    Réponses: 8
    Dernier message: 28/12/2005, 09h49
  2. [VB6] [Crystal] Selection enregistrement
    Par littlecow dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/01/2005, 13h08
  3. Enregistrer un RichEdit dans un .Txt
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/08/2002, 11h52
  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