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 :

copier l'enregistrement en cours


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 70
    Points
    70
    Par défaut copier l'enregistrement en cours
    Bonjour,

    en utilisant la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL " INSERT INTO Deuxième table (champ1, Champ2) SELECT Champ1, Champ2 from Première table"
    je recopie de cette façon l'intégralité de ma première table sur la deuxième.
    Or, je ne souhaite transférer QUE l'enregistrement courant (le premier)

    Comment puis-je m'y prendre ?

  2. #2
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 266
    Points : 182
    Points
    182
    Par défaut
    Bonjour,

    En positionnant une clause "where" qui fait référence à ta zone de texte servant d'argument pour alimenter ta deuxième table !.

    Bon courage.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 70
    Points
    70
    Par défaut
    il n'y a pas de clause Where..

    En fait, je copie, soit un par un, soit en bloc, les x premières lignes de ma table sur une autre table, avant de les supprimer de la première table.

    x n'est pas constant, je le compare donc à un compteur que j'incrémente

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Pour récupérer le "ID" (la clé primaire) de l'enregistrement à transférer (le premier), tu peux peut-être faire un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim EnregistrementAtransferer As String
    Dim Ma_Variable As Recordset
     
    Set Ma_Variable = CurrentDb.OpenRecordset("SELECT * FROM Ma_Table;")
     
    Ma_Variable.MoveFirst
    EnregistrementAtransferer = Ma_Variable("Mon_champ_clé_primaire")
    Ma_Variable.Close
    A partir de là, tu peux effectuer ta requête avec une clause WHERE "Mon_champ_clé_primaire"= EnregistrementAtransferer

    NB : tu peux aussi, suivant ce que tu veux faire, utiliser Ma_Variable.MoveNext pour passer à l'enregistrement suivant dans ta table.
    Il me semble que Set Ma_Variable = CurrentDb.OpenRecordset("Ma table",dbOpenTable) doit marcher aussi

  5. #5
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 266
    Points : 182
    Points
    182
    Par défaut
    Citation Envoyé par jnmab Voir le message
    En fait, je copie, soit un par un, soit en bloc, les x premières lignes de ma table sur une autre table, avant de les supprimer de la première table.
    J'avais une autre solution par rapport au fait que tu devais copier et supprimer les x premières lignes de ta table !..

    Attention, je pars également sur la base de création de tables avec clés primaires !..

    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
    ' je pars du principe que ta table1 a la même structure que ta table 2 et qu'elles sont indexées toutes les deux !.
     
     
        Dim bd As Database, rs1 As Recordset, rs2 As Recordset
        Dim var1 As Integer
     
        Set bd = CurrentDb
        Set rs1 = bd.OpenRecordset("Première table")
        Set rs2 = bd.OpenRecordset("Deuxième table")
     
        'variable nombre d'enregistrement à copier dans la 2ème table  puis à supprimer en conséquence dans la première
        'en l'occurrrence, dans le cas présent, je retiens 5 enregistrements
     
        rs1.MoveFirst
        var1 = 1
        Do Until rs1.EOF
     
            rs1.Edit
     
            rs2.AddNew
            rs2![champ1] = rs1![champ1]
            rs2![champ2] = rs1![champ2]
            rs2.Update
     
            rs1.Delete
     
            var1 = var1 + 1
     
            If var1 = 6 Then
                rs1.Close
                rs2.Close
                Set rs1 = Nothing
                Set rs2 = Nothing
                Exit Function
            End If
            rs1.MoveNext
     
        Loop
        rs1.Close
        rs2.Close
        Set rs1 = Nothing
        Set rs2 = Nothing

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 70
    Points
    70
    Par défaut
    merci beaucoup à vous deux (et un bonjour de Rouen à Paidge)

    En fait (j'avais essayé rs1 et rs2, et ne comprenais pas pourquoi ça ne marchait pas..)

    En fait, donc, je n'ai défini aucune clé primaire, et je suppose que là est mon problème..

    Si, donc, je crée un champ N° auto, ça devrait marcher..?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    A priori oui, ça devrait le faire

  8. #8
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 70
    Points
    70
    Par défaut
    ok, je vais essayer.. et je sais où te trouver si ça ne marche pas...

  9. #9
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 70
    Points
    70
    Par défaut
    Bon, ma petite galère n'étant pas résolue, je cherche une âme charitable...

    J'ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Collaborateur = intbox... (son nom)
     
    'extract du numéro du premier enregistrement
    EnregistrementAtransferer = DLookup("Numéro", "Ma Table initiale")
     
    'copie de cette ligne dans ma table Collaborateur
    DoCmd.RunSQL " INSERT INTO " & collaborateur & " (Numéro, N°_Fournisseur, Nom_Fournisseur SELECT Numéro, N°_Fournisseur, Nom_Fournisseur from Ma Table initiale where Numéro= " & EnregistrementAtransferer & ""
     
    'Suppression de cette ligne de ma table initiale     
    DoCmd.RunSQL " DELETE FROM Ma Table initiale where Ma Table initiale.Numéro = '" & EnregistrementAtransferer & "'"
    C'est cette dernière commande qui pose problème : types de données incompatibles

    Jai essayé de transformer le Numéro auto de ma table en Long, en Text, tout comme ma variable (que je ne peux pas mettre en counter).. rien n'y fait. Je touche au but, mais là, je coince..
    Une suggestion serait la bien venue

  10. #10
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 266
    Points : 182
    Points
    182
    Par défaut
    Bonjour

    La dernière commande, c'est le code entier ou simplement la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.RunSQL " DELETE FROM Ma Table initiale where Ma Table initiale.Numéro = '" & EnregistrementAtransferer & "'"

  11. #11
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 70
    Points
    70
    Par défaut
    le code entier ou simplement la ligne ? c'est une ligne de code DoCmd.sql

    je ne comprends pas..

  12. #12
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 266
    Points : 182
    Points
    182
    Par défaut
    Pour être plus précis, je souhaitais simplement savoir si le blocage s'effectuait à la dernière ligne du code présenté.

    De toute façon, la variable "EnregistrementAtransferer ", telle que tu l'a mise entre quote dans la requête ne peut être que de type string.

    2 solutions :
    - changer le type de champ de la table,
    - changer le type de la variable

    Le runsql doit être rédigé de cette façon :

    pour une variable de type string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL " DELETE FROM Ma Table initiale where Ma Table initiale.Numéro = '" & EnregistrementAtransferer & "'"
    pour une variable de type numérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL " DELETE FROM Ma Table initiale where Ma Table initiale.Numéro = " & EnregistrementAtransferer & ""
    Il faut enlever les '

    bon courage

  13. #13
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 70
    Points
    70
    Par défaut
    Génial ! ça marche !!!!!!

    Je n'étais donc vraiment pas loin du but..!

    Je suis très content (est-ce égoïste ?) que tu ne sois pas en vacances en ce moment !!

    merci

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

Discussions similaires

  1. Empecher Lecture d'Enregistrement en cours de Modification
    Par toony dans le forum Administration
    Réponses: 4
    Dernier message: 09/12/2009, 11h18
  2. Réponses: 3
    Dernier message: 19/03/2008, 21h35
  3. Réponses: 7
    Dernier message: 12/01/2005, 11h30
  4. Réponses: 2
    Dernier message: 10/10/2004, 23h12
  5. Réponses: 7
    Dernier message: 06/10/2004, 22h13

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