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 :

message d'erreur "Update ou cancelUpdate effectué sans appeler AddNew ni Edit"


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut message d'erreur "Update ou cancelUpdate effectué sans appeler AddNew ni Edit"
    Bonjour à Tous,

    je gère une base access2003 pour ma société et je bloque sur le message d'erreur suivant : "Update ou cancelUpdate effectué sans appeler AddNew ni Edit"

    le contexte :
    1- j'ai une table nommée Tmp avec 3 colonnes (cette table est issue d'un import Excel) :
    colonne 1 = [Index contact]
    colonne 2 = [voeux 2011]
    colonne3 = [cadeau 2011]

    2- j'ai une table cible T_mailing déjà existante où je crée deux nouvelles colonnes [voeux 2011] et [cadeau 2011] pour l'instant vierge de données. la première colonne de cette table est [index contact]

    Jusqu'ici tout va bien, mais c'est par la suite que cela bug
    3- je souhaite remplir mes nouvelles colonnes sous T_mailing avec les 2 colonnes de Tmp en respectant la condition pour chaque ligne :
    [Index contact].[T_mailing]=[Index contact].[Tmp].

    voici donc le code qui pose problème lors du passage sur la ligne : ![voeux_2012] = " & Tabletmp.Fields(1).Value" avec le message énoncé précédemment.
    je ne comprends pas pourquoi, il me sort ce message alors que je lui indique Matable.edit dans la boucle With.

    J'ai beau chercher sur la toile des solutions dans les forums, je bloque...

    si quelqu'un a une idée sur une grosse erreur que j'aurais fait.
    Merci d'avance !

    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
     
        Dim MaTable As DAO.Recordset
        Dim Tabletmp As DAO.Recordset
        Set MaTable = CurrentDb.OpenRecordset("T_mailing", dbOpenDynaset)
        Set Tabletmp = CurrentDb.OpenRecordset("tmp", dbOpenDynaset)
     
     
       'on répercute les ajouts sur la table mailing pour les deux nouvelles colonnes
        Dim val As Integer
         While Not Tabletmp.EOF
            MaTable.Edit
            Tabletmp.Edit
            Tabletmp.MoveFirst
            val = Tabletmp.Fields(0).Value
            With MaTable
                .Edit
                .FindFirst ("[Index contact] = " & val)
                ![voeux_2011] = " & Tabletmp.Fields(1).Value"
                ![Cadeau_2011] = " & Tabletmp.Fields(2).Value"
                .Update
                .Requery
            End With
            Tabletmp.MoveNext
         Wend
         MaTable.Update
         MaTable.Close
         Tabletmp.Close

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 135
    Points
    135
    Par défaut
    Bonjour,

    je pense que votre problème vient que vous faites 2 fois MaTable.Edit et 2 fois MaTable.Update.
    Le premier MaTable.Edit qui se trouve en dehors de votre With et dans votre boucle While est inutile. De même pour votre second MaTable.Update (situé juste après votre boucle While).
    Ah, et aussi, vous avez un MaTabletmp.Edit dans votre boucle While inutile puisque vous ne mettez pas à jour ce recordset. Le .Requery est aussi inutile car vous ne mettez pas à jour les champs sur lesquekls vous effectuez votre recherche.
    Et dernier point : votre boucle est infinie puisque vous revenez au premier enregistrement à chaque fois que vous passez dans votre boucle.

    Personnellement, j'aurai écrit :
    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
     
        Dim MaTable As DAO.Recordset
        Dim Tabletmp As DAO.Recordset
        Set MaTable = CurrentDb.OpenRecordset("T_mailing", dbOpenDynaset)
        Set Tabletmp = CurrentDb.OpenRecordset("tmp", dbOpenDynaset)
     
     
       'on répercute les ajouts sur la table mailing pour les deux nouvelles colonnes
        Dim val As Integer
         Tabletmp.MoveFirst
         While Not Tabletmp.EOF
            val = Tabletmp.Fields(0).Value
            With MaTable
                .FindFirst ("[Index contact] = " & val)
                .Edit
                ![voeux_2011] = " & Tabletmp.Fields(1).Value"
                ![Cadeau_2011] = " & Tabletmp.Fields(2).Value"
                .Update
                End With
            Tabletmp.MoveNext
         Wend
         MaTable.Close
         Tabletmp.Close

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour Aegnor,

    désolé pour le retard dans la réponse, mais j'avais de l'huile sur le feu sur d'autres projets...

    Je vous remercie de vos conseils, la solution proposée marche effectivement très bien

    je suis encore loin d'arriver à coder bon du premier coup....

    A bientôt et j'espère pouvoir vous aider un jour.

    Cordialement, Geoffroy

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/07/2010, 11h23
  2. UPDATE avec jointure ne fonctionne pas sans message d'erreur
    Par EnRadeSurEclipse dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/01/2010, 22h22
  3. [MySQL] Message d'erreur pour update
    Par Tee shot dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/02/2008, 16h10
  4. Réponses: 1
    Dernier message: 30/01/2008, 23h10
  5. Réponses: 1
    Dernier message: 30/09/2007, 13h26

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