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

Accès aux données Discussion :

Violation de l'accès concurrentiel


Sujet :

Accès aux données

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Points : 106
    Points
    106
    Par défaut Violation de l'accès concurrentiel
    Bonjour,

    Depuis quelques jours, mon application sort un défaut inédit. J'ai essayé plusieurs méthodes, cherché sur internent et les solutions proposées ne fonctionne pas.

    Je gère un DataSet via une class et ce défaut survient sur plusieurs tables.

    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
    43
    44
    45
    46
    47
    48
    49
    50
     
    Public Class DGV
     
        Public grille As DataGridView
        Dim oledbAdapter As OleDbDataAdapter
        Dim oledbCmdBuilder As OleDbCommandBuilder
        Dim ds As New DataSet
        Dim changes As DataSet
        Dim i As Integer
        Dim key As String
        Dim champsID As String
        Dim tableSQL As String
        Dim sql As String
        Public result As Double
     
        Sub New(ByVal table As String, ByVal conditions As String, ByVal dgv As DataGridView, ByVal formatage As String, Optional ByVal ID As String = "id")
            Try
                key = formatage
                grille = dgv
                tableSQL = table
                champsID = ID
                Connection.Open()
                sql = "SELECT * FROM " & table & " WHERE " & conditions
                oledbAdapter = New OleDbDataAdapter(sql, Connection)
                oledbAdapter.AcceptChangesDuringUpdate = True
                oledbAdapter.Fill(ds)
                dgv.DataSource = ds.Tables(0)
                ds.AcceptChanges()
                Connection.Close()
            Catch ex As Exception
                MsgBox("Erreur DGV " & formatage & " : " & ex.ToString)
            End Try
        End Sub
     
        Sub Update()
            Try
                Connection.Open()
                oledbCmdBuilder = New OleDbCommandBuilder(oledbAdapter)
                changes = ds.GetChanges()
                If changes IsNot Nothing Then
                    oledbAdapter.Update(ds.Tables(0))
                End If
                ds.AcceptChanges()
                Connection.Close()
            Catch ex As DBConcurrencyException
                MsgBox("Erreur Class DGV Update : " & ex.ToString)
            End Try
        End Sub
     
    End Class
    L'erreur survient aléatoirement au moment de l'update. D'après ce que j'ai compris, il s'agit d'un conflit de clé primaire entre celle attribuée par le DataSet et celle attribuée par la table, mais à l'heure actuelle, je n'ai toujours pas trouvé comment résoudre ce conflit.

    Avez vous une idée de ce qu'il faudrait faire ?

    Merci d'avance

    Cordialement

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Plusieurs utilisateurs utilisent ta base simultanément?

    Faudrait peut être voir si tu as des erreurs avant d'updater... Comme dans cet exemple...?

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Alors oui et non pour le nombre d'utilisateurs. C'est à dire que l'application et la BDD finales sont utilisées par 2 à 3 personnes, mais je fais mes tests sur une base de données séparée pour ne pas perturber leur travail et j'ai quand même ces erreurs.

    Dans la mesure où le problème ne survient qu'à l'insertion de données qui suit une suppression, j'ai l'impression qu'il y a un conflit de clé primaire et il faudrait que j'arrive à dire au dataset quel est l'id le plus grand.

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Si l'application doit fonctionner en multi-user sur les mêmes tables, il est preferable d'éviter les update globaux et de faire un update à chaque ajout, modification ou suppression.

    Il faut aussi faire attention à la gestion des champs auto-incréments et aussi gérer les conflits.

    Pour les conflits, une approche "optimistic" est la plus adapté si il y a peu d'utilisateurs : on contrôle à posteriori que l'enregistrement modifié n'a pas été mis à jour par un autre utilsateur depuis le moment de sa lecture.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

Discussions similaires

  1. oleDB - Violation de l'accès concurrentiel
    Par JbTech dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/05/2010, 17h05
  2. Réponses: 0
    Dernier message: 20/05/2010, 10h46
  3. ErrorMessage : Violation de l'accès concurrentiel
    Par mohamed301084 dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/04/2010, 10h46
  4. Problème de "Violation de l'accès concurrentiel"
    Par Marc_27 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/06/2009, 16h24
  5. Violation de l'acces concurrentiel
    Par bilou972 dans le forum C#
    Réponses: 3
    Dernier message: 20/04/2009, 16h24

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