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 :

Erreur 3167 sur suppression d'un enregistrement


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 31
    Points
    31
    Par défaut Erreur 3167 sur suppression d'un enregistrement
    Bonjour,

    J'ai une BDD Access 2000 qui fonctionnait jusqu'à présent très bien.
    Je n'ai rien changé et maintenant sur un bouton suppression, j'ai cette
    erreur :
    3167 Enregistrement supprimé

    mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL = "DELETE * FROM table WHERE num_auto_table = " & Me!num_auto_table
    connexion.Execute (SQL)
     
    ' Rafraichit la source du formulaire
    Me.Requery
    Rien de compliquer à tout ceci surtout que ça marchait avant...
    L'erreur se produit sur l'actualisation du formulaire (Me.Requery).
    J'utilise la même méthode pour supprimer un enr dans tous mes formulaires et
    il n'y a que là où ça ne marche plus.
    La source de mon formulaire est ok (ce formulaire est basé sur une table).
    J'ai également compacté la BDD mais rien de changer.

    Auriez-vous une solution à mon problème ?
    D'avance je vous en remercie.

    Maeva.

  2. #2
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    c'est certainement parce que tu agis ainsi sur le record du formulaire.

    Personellement j'appelle une fonction pour la suppression des enregistrements.

    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
     
    Function fDelCurrentRec(ByRef frmSomeForm As Form, Strmessage As String) As Boolean
    On Error GoTo Err_Section
        Dim bytChoix As Byte
        bytChoix = MsgBox("Etes-vous certain de vouloir supprimer " & Strmessage & "?", vbQuestion + vbOKCancel, NomApp)
        If bytChoix = vbOK Then
     
            With frmSomeForm
                If .NewRecord Then
                    .Undo
                    fDelCurrentRec = True
                    GoTo Exit_Section
                End If
            End With
     
            With frmSomeForm.RecordsetClone
                .Bookmark = frmSomeForm.Bookmark
                .Delete
                frmSomeForm.Requery
            End With
            fDelCurrentRec = True
        End If
    Exit_Section:
            Exit Function
     
    Err_Section:
            fDelCurrentRec = False
            Resume Exit_Section
          End Function
    c'est une fonction que j'avais trouvé sur internet

    tu peux l'appeler avec call fDelCurrentRec (me, " texte pour la suppression")

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Alexandre, à priori, avec recordsetClone, l'affectation du bookmark est inutile. Il me semble que tu te retrouve sur le bon enregistrement dans tous les cas. Mais pourquoi travaillé avec le recordsetClone et non pas avec le recordset directement ?

    EDIT : En fait, tu as raison, le bookmark est bien utile

  4. #4
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Salut Tofalu,

    Car il semble que si l'on supprime l'enregistrement sur lequel on se trouve dans le formulaire et que l'on utilise le reccord set cela provoque une erreur.

    Cette façon de faire permet d'éviter d'utiliser les fonctions de menu.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 31
    Points
    31
    Par défaut
    J'ai essayé ton code et cela ne change pas mon problème.

    Je m'explique mieux :
    Lors de la suppression, "on dirait" que la source de mon formulaire se vide et donc lors du Me.Requery, ça plante car il ne peut se repositionner sur aucun enregistrement.
    Je suis alors obligée de fermer et rouvrir le formulaire pour que la source réapparaisse et l'enregistrement est bien supprimé.

    Avez-vous un autre idée ?


  6. #6
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    lorsque tu exécutes ton code tu te situe où?
    est tu positionnés sur l'enregistrement en cours?
    As tu un bouton?
    (peut être peux tu mettre ton formulaire en image)

    car chez moi je l'utilise partout et même si le formulaire est vide c'est ok.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 31
    Points
    31
    Par défaut
    J'ai compris où est mon erreur.
    La suppression se fait bien mais lors du Me.Requery, le code passe dans ma fonction Form_Current() et c'est là qu'est l'erreur car je fais verrouiller certains champs dans cette fonction, la source du formulaire n'étant pas encore actualisée, ça plante.
    Il faudrait que je fasse exécuter ce code que si pas de suppression.

    Comment puis-je faire ? Y a-t-il une fonction qui dit que l'on est sur un enr supprimé (style Me.NewRecord, mais pour une suppression) ?

    Merci.

Discussions similaires

  1. [AC-2002] Erreur 3111 sur création ou suppression de table
    Par waici dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/08/2009, 13h41
  2. [00] suppression d'un enregistrement sur condition
    Par popofpopof dans le forum IHM
    Réponses: 2
    Dernier message: 19/03/2009, 06h49
  3. Erreur sur suppression Record dans SS form
    Par Maxsen dans le forum VBA Access
    Réponses: 4
    Dernier message: 29/02/2008, 21h45
  4. [VBA-E]Erreur sur suppression d'images dans excel
    Par bernard38 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 18/04/2006, 13h55
  5. Réponses: 2
    Dernier message: 12/10/2005, 15h15

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