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

Requêtes et SQL. Discussion :

Prob. Recordset clone [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut Prob. Recordset clone
    Bonjour le Forum,

    Je coince sur le problème suivant:
    -j'aimerai cloner un enregistrement précis d'une table et y apporter quelques modifications (nouvel enregistrement)
    Je peux difficilement utiliser INSERT INTO, car il y a beaucoup de champ ... Donc je me suis dis, CLONE et quelques modif.
    Ce bout de code, crée une nouvelle entrée avec les 4 modifications ci-dessous, mais les autres champ ne sont pas rempli.
    En gros, il n'y a pas de clone, mais une nouvelle entrée. Comment faire ?
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ' SQL pour le clonage
    monSQL = "SELECT * FROM tblDetails WHERE PaletteCode='%1'"
    monSQL = Replace(monSQL, "%1", aclone)
    'Debug.Print monSQL
    Set oRS = oDb.OpenRecordset(monSQL, dbOpenDynaset, dbSeeChanges)
    Set oRSclone = oRS.Clone
    oRSclone.AddNew
      oRSclone.Fields("Benutzer").Value = Environ("Username")
      oRSclone.Fields("PaletteNr").Value = ladernierepos + 1
      oRSclone.Fields("Datum").Value = Now()
      oRSclone.Fields("PaletteCode") = mjobcode & Format(ladernierepos + 1, "000")
    oRSclone.Update

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Le clone est une copie des enregistrements existants, et quand tu ajoutes un enregistrement il est vide.

    La seule façon que je vois est de faire :

    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
    dim r1 as dao.recordset
    'ici du code pour définir rs1 et se positionner sur l'enregistrement source
     
    dim r2 as dao.recordset
    'ici du code pour définir rs2
    'rs1 et rs2 pointe sur la MÊME source de données
     
    rs2.addnew
    dim f as dao.field: for each f in r1.fields
       rs2.fields(f.name)=f 'Recopie tous les champs
    next f
     
    'ici ton code pour les valeurs des champs particuliers.
     
    rs2.update
    A+

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 391
    Points : 19 817
    Points
    19 817
    Billets dans le blog
    66
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Le clone est une copie des enregistrements existants, et quand tu ajoutes un enregistrement il est vide.

    La seule façon que je vois est de faire :

    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
    dim r1 as dao.recordset
    'ici du code pour définir rs1 et se positionner sur l'enregistrement source
     
    dim r2 as dao.recordset
    'ici du code pour définir rs2
    'rs1 et rs2 pointe sur la MÊME source de données
     
    rs2.addnew
    dim f as dao.field: for each f in r1.fields
       rs2.fields(f.name)=f 'Recopie tous les champs
    next f
     
    'ici ton code pour les valeurs des champs particuliers.
     
    rs2.update
    A+
    ça pourrait faire l'objet d'une contribution avec une routine pour cloner/dupliquer un enregistrement puis modifications de valeurs particulières

    Perso je l'utilise pour dupliquer des commandes ou des factures avec leur détail.

  4. #4
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Merci pour votre contribution, après mise en place du code, il y a une erreur ODBC / 3146... sur la ligne oRSclone.update

    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
    monSQL = "SELECT * FROM tblDetails WHERE PaletteCode='%1'"
    monSQL = Replace(monSQL, "%1", aclone)
     
    Set oRS = oDb.OpenRecordset(monSQL, dbOpenDynaset, dbSeeChanges)
     
    Set oRSclone = oDb.OpenRecordset("tblDetails", dbOpenDynaset, dbSeeChanges)
    oRSclone.AddNew
     
    Dim f As DAO.Field
     
        For Each f In oRS.Fields
           oRSclone.Fields(f.Name) = f 'Recopie tous les champs
        Next f
     
      oRSclone.Fields("Benutzer").Value = Environ("Username")
      oRSclone.Fields("PaletteNr").Value = ladernierepos + 1
      oRSclone.Fields("Datum").Value = Now()
      oRSclone.Fields("PaletteCode").Value = mjobcode & Format(ladernierepos + 1, "000")
    oRSclone.Update

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Arg, j'ai trouvé l'erreur. Le premier champ de la table est un numéro Auto
    Comment faire pour ne pas copier le numéro auto ?

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 391
    Points : 19 817
    Points
    19 817
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    Il faut repéré le nom du champ numéro-auto :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    For Each f In oRS.Fields
           if f.Name<>"ChampNumeroauto" Then
               oRSclone.Fields(f.Name) = f 'Recopie tous les champs
           end if
    Next f
    ...
    Cdlt,

  7. #7
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Super, ca marche ...
    Un grand merci au forum et particulierement à USER pour ton aide.

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 391
    Points : 19 817
    Points
    19 817
    Billets dans le blog
    66
    Par défaut
    Citation Envoyé par boldair67 Voir le message
    Super, ca marche ...
    Un grand merci au forum et particulierement à USER pour ton aide.
    N'oublions pas Marot qui a donné le code

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

Discussions similaires

  1. [AC-2003] Petit problème avec Recordset.Clone
    Par RoBout dans le forum VBA Access
    Réponses: 6
    Dernier message: 26/11/2012, 21h14
  2. Réponses: 0
    Dernier message: 24/02/2010, 10h43
  3. [VBA][03]Différence Recordset.Clone et RecordsetClone
    Par seb92400 dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/04/2007, 17h09
  4. Erreur 91 Access sur "Set rs = Me.Recordset.Clone"
    Par patoche47200 dans le forum Access
    Réponses: 6
    Dernier message: 22/03/2006, 22h50
  5. [VBA] Problème de clone d'un recordset
    Par Durkheim dans le forum Access
    Réponses: 2
    Dernier message: 05/01/2006, 17h46

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