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 :

problème de compréhension recordset pour dupliquer


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut problème de compréhension recordset pour dupliquer
    Bonjour,

    Je cherche à dupliquer des informations en passant par un recordset. Débutant dans ce domaine et ayant lu la FAQ, j'ai quand même du mal.

    Je ne comprends pas bien dans le code ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql = "insert into LigneProtocole (IdProtocole,Libelleligne) SELECT " & _
      id & ", LibelleLigne FROM LigneProtocole WHERE idprotocole=1"
    Je ne sais pas quoi mettre dans LigneProtocole et LibelleLigne. Voilà mon code pour l'instant. Le but est de dupliquer un formulaire et ses deux sous-formulaires.

    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
    Private Sub Commande104_Click()
     
    Dim rstProtocole As DAO.Recordset, rstProtocole2 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é le protocole
    Set rstProtocole = Db.OpenRecordset("SELECT * FROM rqtContrat WHERE N°Interim = 1")
    'Verifie que le protocole 1 existe
    If rstProtocole.EOF Then Exit Sub
    'ouvre le recordset où sera ajouté le protocole
    Set rstProtocole2 = Db.OpenRecordset("rqtContratbis")
    'Duplique le protocole
    With rstProtocole2
      .AddNew
      'duplique les champs
      For Each fld In rstProtocole.Fields
        .Fields(fld.Name) = fld.Value
      Next
      id = .Fields("N°Interim")
      .Update
      'se positionne sur l'enregistrement ajouté
    End With
     
    'Duplique les lignes
    sql = "insert into LigneProtocole (N°Interim,Libelleligne) SELECT " & _
      id & ", LibelleLigne FROM LigneProtocole WHERE idprotocole=1"
    Db.Execute sql
     
    End Sub
    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Plus que la FAQ, c'est ceci que tu dois lire !
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    Je n'ai que peu de temps aujourd'hui pour réaliser le projet. Je suis dans l'incapacité de lire tout ça. Peux-tu m'aiguiller un peu sur mon code ?

    Je résume la situation :

    - un formulaire principal (frmSaisieContrat2) basé sur la requête rqtContrat. Clé : N°CONTRAT
    - un sous-formulaire (frmPointage2) basé sur la requête rqtPointage2. Clé : N°CONTRAT
    - un autre sous-formulaire (ssfrmInterim1) basé sur la table Point. Clé : N°CONTRAT

    J'ai placé un bouton dupliquer sur le formulaire principal. Il doit :
    - dupliquer les champs du formulaire principal en incrémentant la clé.
    - dupliquer deux champs du sous-formulaire frmPointage2 et mettre les autres à blanc.
    - dupliquer tous les champs du sous-formulaire ssfrmInterim1.

    Merci vraiment de ton aide. Je ne suis pas programmeur et on m'a filé ce boulot à faire. C'est pas évident ...

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    J'ai lu surtout le chapitre 5 du tutoriel.
    Du coup, je ne sais pas si je dois faire un clone ou ce que j'étais en train de faire... ?
    Deux de mes formulaire étant basé sur des requêtes, dois-je faire des querydef ... ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Le problème, c'est que je suis un peu perdu dans tes explication.

    C'est l'enregistrement actif dans le formulaire que tu veux dupliquer ?
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    oui simplement l'enregistrement actif pardon !

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    Voilà le nouveau code avec la bonne clé :

    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
    Private Sub Commande104_Click()
     
    Dim rstProtocole As DAO.Recordset, rstProtocole2 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é le protocole
    Set rstProtocole = Db.OpenRecordset("SELECT * FROM rqtContrat WHERE [N__CONTRAT] = 1")
    'Verifie que le protocole 1 existe
    If rstProtocole.EOF Then Exit Sub
    'ouvre le recordset où sera ajouté le protocole
    Set rstProtocole2 = Db.OpenRecordset("rqtContratbis")
    'Duplique le protocole
    With rstProtocole2
      .AddNew
      'duplique les champs
      For Each fld In rstProtocole.Fields
        .Fields(fld.Name) = fld.Value
      Next
      id = .Fields("N__CONTRAT")
      .Update
      'se positionne sur l'enregistrement ajouté
    End With
     
    'Duplique les lignes
    sql = "insert into LigneProtocole (N__CONTRAT,Libelleligne) SELECT " & _
      id & ", LibelleLigne FROM LigneProtocole WHERE N__CONTRAT=1"
    Db.Execute sql
     
    End Sub

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Pourquoi t'embarrasser avec des requêtes pour dupliquer des données qui sont présentes dans le formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    rs01.addnew
    rs01.field("monchamp") = Me.moncontrolduform
    ...
    ...
    rs01.udate
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    au contraire, je veux faire au plus simple. Mais rien que le code que tu as mis je ne sais pas où l'intégrer dans mon code. Comment dire a access que je veux dupliquer l'enregistrement en cours et non pas l'enregistrement 1 ? Déjà pour commencer ...

  10. #10
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    peux-tu mettre ta db sur le forum.

    Normalement, le clic doit fonctionner pour tous les enregistrements ou simplement pour l'enregistrement en cours.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  11. #11
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    Je ne peux pas, il y a des données sensibles. Est-ce qu'une copie d'écran marcherai pour toi ?

  12. #12
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    ok je t'envoies le fichier, j'ai fait des suppressions et des modifs. Je m'en vais à 16h et je serai de retour jeudi et vendredi. Merci de ton aide.


  13. #13
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Il semblerait que ton archive soit corrompue.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  14. #14
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    ok ça devrait être mieux.

  15. #15
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je viens de faire le tour de ton appli.

    Les deux sous formulaires proviennent tous les deux de la même table, donc il ne faut dupliquer qu'une seule fois.

    Je vais tenter le coup avec deux simples requêtes ajout.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  16. #16
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Voilà, ce que je pensais est correct.
    Il suffit dune simple requête ajout pour dupliquer l'enregistrement.

    la requête est qryAddContrat(oli)

    Il ne te reste qu'à faire pareil pour l'autre table.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  17. #17
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    ok merci pour ton aide.

  18. #18
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    Ca a l'air de bien marcher pour le formulaire principal. Voici le code SQL de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Contrat ( N°Interim, RESPONSABL, QUALIFICAT, T_CHE, N__CONTRA2, HEURE_DTM9, MOTIF )
    SELECT rqtContrat.N°Interim, rqtContrat.RESPONSABL, rqtContrat.QUALIFICAT, rqtContrat.T_CHE, rqtContrat.N__CONTRA2, rqtContrat.HEURE_DTM9, rqtContrat.MOTIF
    FROM rqtContrat
    WHERE (((rqtContrat.N__CONTRAT)=[Formulaires]![frmSaisieContrat2]![N__CONTRAT]));
    et le code du bouton activant la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Commande106_Click()
    DoCmd.OpenQuery "qryAddContrat(oli)2"
    DoCmd.Requery
    DoCmd.GoToRecord , , acLast
    End Sub
    Par contre pour les sous formulaire, est-ce que je peux lancer une autre requête dans ce même bouton qui me dupliquerait également les enregistrements des sous-formulaires, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Commande106_Click()
    DoCmd.OpenQuery "qryAddContrat(oli)2"
    DoCmd.OpenQuery "qryAddContrat(oli)3"
    DoCmd.Requery
    DoCmd.GoToRecord , , acLast
    End Sub
    Avec qryAddContrat(oli)3 en SQL qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Point ( CENTRE_UTI, CYCLE_TRAV, COEFFICIEN, SALAIRE_DE, TRANSPORT, D_PLACEMEN, PRIME_DIM_, PRIME_NUIT, PRIME_PANI, PRIME_PAN2, MOIS, MT_FACTURE, TPDI_50_, SURCRO_T, JOUR_F_RI_ )
    SELECT Point.CENTRE_UTI, Point.CYCLE_TRAV, Point.COEFFICIEN, Point.SALAIRE_DE, Point.TRANSPORT, Point.D_PLACEMEN, Point.PRIME_DIM_, Point.PRIME_NUIT, Point.PRIME_PANI, Point.PRIME_PAN2, Point.MOIS, Point.MT_FACTURE, Point.TPDI_50_, Point.SURCRO_T, Point.JOUR_F_RI_
    FROM rqtContrat INNER JOIN Point ON rqtContrat.N__CONTRAT = Point.N__CONTRAT
    WHERE (((Point.N__CONTRAT)=[rqtContrat].[N__CONTRAT]) AND ((Point.n°pointage)=[n°pointage]));
    Mais j'ai un problème de clé, il me duplique tous les enregistrements du sous-formulaire, sans tenir compte du n° de contrat du formulaire principal. En bref, j'ai 100 pointages, si je duplique, je me retrouve avec 200, puis 400, puis 800, etc ... Que faire ? Ma syntaxe des clés doit être mauvaise.

  19. #19
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Il faut mettre un critère pour limiter les enregistrements dupliqués. Si tu ne mets pas de critères, tous les enregistrements sont dupliqués.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  20. #20
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 8
    Points
    8
    Par défaut
    Voila le code de la requête ajout pour sous-formulaire, mais il me dit au lancement un long message comme quoi, "Access a attribué la valeur nul à 0 champs à la suite d'une erreur de conversion de type ..."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Point ( CENTRE_UTI, CYCLE_TRAV, COEFFICIEN, SALAIRE_DE, TRANSPORT, D_PLACEMEN, PRIME_DIM_, PRIME_NUIT, PRIME_PANI, PRIME_PAN2, MOIS, MT_FACTURE, TPDI_50_, SURCRO_T, JOUR_F_RI_ )
    SELECT Point.CENTRE_UTI, Point.CYCLE_TRAV, Point.COEFFICIEN, Point.SALAIRE_DE, Point.TRANSPORT, Point.D_PLACEMEN, Point.PRIME_DIM_, Point.PRIME_NUIT, Point.PRIME_PANI, Point.PRIME_PAN2, Point.MOIS, Point.MT_FACTURE, Point.TPDI_50_, Point.SURCRO_T, Point.JOUR_F_RI_
    FROM Point
    WHERE (((Point.N__CONTRAT)=[formulaires]![frmSaisieContrat2].[N__CONTRAT]));

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. problème pour dupliquer un clip enfant vers un autre clip
    Par markool dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 09/12/2009, 10h20
  2. Problème de compréhension pour <<interface>>
    Par tnarol dans le forum UML
    Réponses: 7
    Dernier message: 07/02/2007, 20h07
  3. Recordset pour dupliquer un sous-formulaire
    Par fredpeca dans le forum Access
    Réponses: 3
    Dernier message: 05/02/2007, 16h07
  4. Réponses: 15
    Dernier message: 23/06/2006, 13h57
  5. [Access 2003]Problème pour dupliquer?
    Par steeves5 dans le forum Access
    Réponses: 6
    Dernier message: 24/05/2006, 12h19

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