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 :

Supprimer message d'erreur "Conflit d'écriture" lors d'une requete de MAJ [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut Supprimer message d'erreur "Conflit d'écriture" lors d'une requete de MAJ
    Bonjour,

    J'utilise une requete de maj sur un contrôle remplie par l'utilisateur, si la valeur rentrée est fausse, la requete s'execute et passe celle-ci à "0".

    Tout fonctionne mais un message d'erreur apparait :

    "Conflit d'écriture : Cet enregistrement a été modifié par un autre utilisateur depuis que vous avez commencé à le modifier. Si vous enregistrez vos modifications vous remplacerez celles effectuées par l'autre utilisateur (etc....)"

    Avec 3 boutons : "Sauvegarder enregistrement" "Copier dans presse papier" "annuler"

    Comment empêcher ce message d'apparaitre? (On m'a parlé de la fonction me.dirty mais je ne parviens pas à m'en servir.)

    Edit : Je précise que j'ai déjà supprimé toutes les demandes de confirmations des requetes actions dans les options sans succès.

    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    Ne serait-il pas plus simple d'utiliser une procédure sur l'événement Apres MAJ du champ ?
    Du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private MonChamp_AfterUpdate()
       If MonChamp <> xx 'test si la valeur est fausse
          MonChamp=0
       End If
    End Sub
    Il faut éviter les requètes Mise à jour sur des enregistrements qui sont en cours de modification.
    Dans le pire des cas il faut valider l'enregistrement avant d'exécuter la requète.
    Frédéric
    Développeur d'Applications Access

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Non c'est un peu plus compliqué que ça, en gros ça me permet de contourner l'enregistrement automatique d'access. Il s'agit d'un sous formulaire me permettant de choisir les produits à sortir du stock et les quantités. Je fait un dlookup sur les quantités disponibles et je test la valeur rentrée par l'utilisateur.

    Le problème est que si celui-ci rentre une valeur correcte mais la change après être passé à un autre contrôle (ex je sors 1 qtité, je passe à un autre contrôle puis je reviens et au lieu de 1 qtité je met 2) la 1ere valeur est déjà enregistrée et le dlookup remonte donc une nouvelle valeur qui est fausse.

    Voici le code pour illustrer :

    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
    Private Sub QteSortie_BeforeUpdate(Cancel As Integer)
     
    Dim strMsg As String, strTitre As String
    Dim intStyle As Integer
     
     
    If Not IsNull(Me![QteSortie]) Then
     
        SQL = "UPDATE SortieDetail SET [QteSortie] = 0 WHERE [NSortie] = " & Me![NSortie]
        SQL = SQL & " AND [NProduit] = " & Me![NProduit]
        SQL = SQL & ";"
        DoCmd.RunSQL (SQL)
     
    End If
     
     
    If Forms![FrmSortie]!LieuS = "Stock" Then
     
        a = Nz(DLookup("QteBUStock", "ReqCalculStockEtLocauxBU", "[NProduit] =" & Me![NProduit] & " And [BU] ='" & Forms![FrmSortie]!BU & "'"), 0)
        Debug.Print a
     
        If Me.QteSortie > Int(a) Then
     
            strMsg = "La quantité à sortir est supérieure à la quantité en stock attribuée à ce BU, vérifiez la répartition du stock et/ou vérifiez que le produit ne soit pas déja présent dans les locaux."
            intStyle = vbOKOnly
            strTitre = "Erreur Quantité"
            MsgBox strMsg, intStyle, strTitre
            Cancel = True
     
        End If
     
    End If
     
    End sub
    (je sais le SQL est écrit bizarement mais j'avais des problèmes de syntaxe en l'écrivant sur une seule ligne )

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Pour se passer de la remise à zéro de l'entrée, ne pourrait-on pas utiliser ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' récupère la quantité en stock
    a = Nz(DLookup("QteBUStock", "ReqCalculStockEtLocauxBU", "[NProduit] =" & Me![NProduit] & " And [BU] ='" & Forms![FrmSortie]!BU & "'"), 0)
     
    ' rajoute quantité enregistrée de la ligne sur laquelle on est
    a = a + Nz(DLookup("QteSortie", "SortieDetail", "[NSortie] = " & Me![NSortie] & " and [NProduit] =" & Me![NProduit]), 0)
    ?
    Frédéric
    Développeur d'Applications Access

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Bien vu !!!!

    Avec à peine quelques explications de ma part tu me sors une réponse prête à l'emploi en un simple copier-coller...chapeau !

    Merci beaucoup.

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

Discussions similaires

  1. [AC-2010] Gérer/Répondre à une erreur de conflit d'écriture automatiquement
    Par MisterMumu dans le forum VBA Access
    Réponses: 4
    Dernier message: 17/11/2014, 09h44
  2. Supprimer message d'erreur du webbrowser
    Par mecyber25 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 11/07/2011, 11h52
  3. Réponses: 1
    Dernier message: 03/03/2009, 12h41
  4. supprimer message d'erreur dans MsgBox?
    Par gberthier dans le forum IHM
    Réponses: 4
    Dernier message: 25/02/2008, 16h40
  5. Réponses: 3
    Dernier message: 05/01/2006, 15h14

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