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

Requêtes et SQL. Discussion :

Violation de verrou [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut Violation de verrou
    Bonjour,

    Je suis face à un problème de Violation de verrou.
    Ayant regardé sur internet, j'ai compris ce que c'était mais je vois absolument pas ce que j'ai fait de ma mal dans mon code.
    Surtout que je n'ai pas toujours ce problème, et pas toujours à la même ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = """ & Now() & """ WHERE IDElement = " & IDElement & " AND NomTable = ""T_Campagne""" 'Celle ci fonctionne toujours
     
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = """ & Now() & """ WHERE NomTable = ""T_Acteur"" AND IDElement IN (" & _
         "SELECT DISTINCT IDActeur FROM T_Acteur, T_Essai, T_CampagneTest WHERE Essai = IDEssai AND CampagneTest = IDCampagneTest AND Campagne = " & IDElement & ")"
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = """ & Now() & """ WHERE NomTable = ""T_SuiviExigenceEssai"" AND IDElement IN (" & _
         "SELECT DISTINCT IDSuivi FROM T_SuiviExigenceEssai, T_Essai, T_CampagneTest WHERE Essai = IDEssai AND CampagneTest = IDCampagneTest AND Campagne = " & IDElement & ")"
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = """ & Now() & """ WHERE NomTable = ""T_LienEssaiComposant"" AND IDElement IN (" & _
         "SELECT DISTINCT IDLienEssaiComposant FROM T_LienEssaiComposant, T_Essai, T_CampagneTest WHERE Essai = IDEssai AND CampagneTest = IDCampagneTest AND Campagne = " & IDElement & ")"
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = """ & Now() & """ WHERE NomTable = ""T_EssaiIncident"" AND IDElement IN (" & _
         "SELECT DISTINCT IDEssaiIncident FROM T_EssaiIncident, T_Essai, T_CampagneTest WHERE Essai = IDEssai AND CampagneTest = IDCampagneTest AND Campagne = " & IDElement & ")"
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = """ & Now() & """ WHERE NomTable = ""T_Essai"" AND IDElement IN (" & _
         "SELECT DISTINCT IDEssai FROM T_Essai, T_CampagneTest WHERE CampagneTest = IDCampagneTest AND Campagne = " & IDElement & ")"
    Est-ce que c'est la sous-requête qui peut poser problème?

    Si quelqu'un peut m'aider, ça m'arrangerais beaucoup je sais pas quoi faire...
    Merci d'avance!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    Salut,

    essaie les requetes une par une dans l'IHM Access et regarde plus en detail le message genere stp


    Ton champ DateModif n'est il pas de type Date ?

    POur le verrou tu peux avoir une unicite qui n'est pas respectee lors de ton insertion.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Bonjour et merci pour ta réponse.

    Je suis pas trop sûr de comprendre ce que tu entends par "exécuter les requêtes une par une dans l'IHM Access."
    Du coup quand je les fait toutes une par une ou alors toute d'affilée j'ai le même message d'erreur:

    Nom : bu.png
Affichages : 1100
Taille : 12,4 Ko
    D'ailleurs ce qui est bizarre c'est que si j'appuie sur Oui ça fonctionne ^^

    J'ai aussi essayé la même chose en fermant tous les formulaires, mais j'ai la même erreur. Donc j'imagine que c'est ma requête elle-même qui pose un problème de violation de verrou.

    Oui DateModif est bien de type Date, et il n'y a aucune restriction sur ce champ.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    OK,

    la doc dit clairement
    Violations de verrou Si la table de destination est ouverte en mode Création ou par un autre utilisateur sur le réseau, l’enregistrement peut être verrouillé ce qui empêche la requête d’ajouter des enregistrements. Vérifiez que personne n’est connecté à la base de données.
    es-tu dans un cas similaire ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    J'ai tout fermé et je suis en local donc c'est pas possible ^^. J'ai aussi regardé au niveau de mes processus, j'en ai bien qu'un pour MS Access.

    Autre précision, si je fais exactement les mêmes requêtes mais en attribuant la valeur Null à la place de Now(), j'ai aucun problème de verrou.

    Je me demandais aussi si c'était pas ma sous-requête qui ouvrait la table et qui causait la violation de verrou pour les lignes suivante qui ouvrait la même table pour la même ligne.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Bon, j'ai modifié mon code, je passe plus par une sous-requête mais je fait la requête à part et je boucle dessus pour changer chaque valeur.
    C'est bien sûr beaaaucoup plus long (mais ça marche), donc c'est temporaire.

    Si quelqu'un trouve une solution au problème initial je suis toujours preneur

  7. #7
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 996
    Par défaut
    Bonjour,
    Je ne sais pas si cela va résoudre ton problème de verrou, mais Now() étant une fonction intégrée, elle peut être directement utilisée dans le SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = Now() WHERE IDElement = " & IDElement & " AND NomTable = ""T_Campagne""" 'Celle ci fonctionne toujours
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = Now() WHERE NomTable = ""T_Acteur"" AND IDElement IN (" & _
         "SELECT DISTINCT IDActeur FROM T_Acteur, T_Essai, T_CampagneTest WHERE Essai = IDEssai AND CampagneTest = IDCampagneTest AND Campagne = " & IDElement & ")"
    ' etc...
    cela vaut le coup d'essayer ...
    Sinon tu peux aussi tenter la commande Execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim stSql as String
    StSql = "UPDATE T_ModifDate SET DateModif = Now() WHERE NomTable = ""T_Acteur"" AND IDElement IN (" 
    StSql = StSql & "SELECT DISTINCT IDActeur FROM T_Acteur, T_Essai, T_CampagneTest WHERE Essai = IDEssai AND CampagneTest = IDCampagneTest AND Campagne = " & IDElement & ");"
    CurrentDb.Execute StSql, dbFailOnError
    StSql =  '... etc.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Bonjour,

    Alors j'ai aussi essayé ta première méthode, mais ça ne fonctionne pas pour autant malheureusement. Pourtant l'erreur doit être par là, puisque ça fonctionne bien quand je met la valeur à Null...
    Pour la deuxième méthode, c'est limite plus long que ma méthode à moi de boucler ligne par ligne ^^ Mais ça a l'air de fonctionner

    Merci pour ton aide!

  9. #9
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Alors, quand je fais juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.RunSQL "UPDATE T_ModifDate SET DateModif = Now"
    J'ai aussi la violation de verrou... Donc j'imagine que quelque chose ne va pas dans ma table T_ModifDate.

    Nom : infoT_ModifDate.png
Affichages : 1185
Taille : 33,4 Ko

    J'ai aussi des macros de données sur cette table qui vont modifier d'autres lignes sur cette même table si ça peut aider.
    Si quelqu'un sait quoi faire... :3

  10. #10
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 996
    Par défaut
    Bonjour,
    si tes macros de données (que je ne connais pas, mais je suppose que c'est un déclencheur, ou trigger en anglais) utilisent la tables mise à jour, c'est certainement l'origine des verrous. Peut-être devrais-tu poster sur le sous-forum Macros ?

  11. #11
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Alors j'ai enfin résolu le problème, mais comment c'est un peu bizarre, ça n'a pas été du premier coup ^^
    J'ai bidouillé mes macros de données (trigers oui), et je suis revenu à ton CurrentDb.Execute et ça fonctionne (et rapidement)

    Mon problème à la base c'est que mon champs Pere corresponds à une autre ligne de ce tableau (quand différent de null).
    Quand Pere n'est pas null, je modifie la valeur DateModif de la ligne qui corresponds à ce champ Pere.
    Et il arrive que 20 lignes aient le même champs père, et donc cette ligne est modifiée 20 fois => Violation de verrou.

    Du coup merci beaucoup pour l'aide, j'espère que ça ne replantera pas...

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

Discussions similaires

  1. [AC-2003] Violation de clé - verrou
    Par yeah112 dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/05/2009, 17h06
  2. [DELPHI][PROECEDURES STOCKES] Access violation
    Par All Jinx dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/05/2004, 16h57
  3. Récupere erreur de Violation de kley unique
    Par neness dans le forum Bases de données
    Réponses: 7
    Dernier message: 26/02/2004, 20h26
  4. Réponses: 3
    Dernier message: 22/05/2002, 10h37

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