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

Windows Forms Discussion :

Problème de "Violation de l'accès concurrentiel"


Sujet :

Windows Forms

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut Problème de "Violation de l'accès concurrentiel"
    Bonjour à tous,

    j'ai quelques problèmes lorsque j'essaye de faire des changements dans une table Access, j'ai l'infame erreur "Violation de l'accès concurrentiel"

    J'ai besoin de verifier quelques donnés dans la table et ensuite faire quelques changements.

    Voilà mon code:
    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
    strSQL = "SELECT T_contrats.* " & _
                         "FROM T_contrats " & _
                         "WHERE T_contrats.Mec='" & Me.lblCollaborateurMec.Text & "' " & _
                         "ORDER BY T_contrats.Debut DESC"
                ObjetConnection = New OleDbConnection()
                ObjetConnection.ConnectionString = CollaborateursConn
                ObjetConnection.Open()
                ObjetCommand = New OleDbCommand(strSQL)
                ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
                ObjetCommand.Connection() = ObjetConnection
                ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
                ObjetDataTable = ObjetDataSet.Tables("T_contrats")
                Dim No As String = ObjetDataTable.Rows(0).Item("No")
                Dim contrat As String = ObjetDataTable.Rows(0).Item("Contrat")
                Dim heures As String = ObjetDataTable.Rows(0).Item("Heures").ToString
                Dim categorie As String = ObjetDataTable.Rows(0).Item("Categorie")
                ObjetDataSet.Clear()
                ObjetConnection = Nothing
                ObjetCommand = Nothing
                ObjetDataAdapter = Nothing
                Dim change As Boolean = False
                If Me.cbContrat.Text <> contrat OrElse Me.txtTempsTravail.Text <> heures OrElse Me.txtCategorie.Text <> categorie Then
                    strSQL = "SELECT T_contrats.* " & _
                         "FROM T_contrats " & _
                         "WHERE T_contrats.No=" & No
                    ObjetConnection = New OleDbConnection()
                    ObjetConnection.ConnectionString = CollaborateursConn
                    ObjetConnection.Open()
                    ObjetCommand = New OleDbCommand(strSQL)
                    ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
                    ObjetCommand.Connection() = ObjetConnection
                    ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
                    ObjetDataTable = ObjetDataSet.Tables("T_contrats")
                    MsgBox(ObjetDataSet.Tables("T_contrats").Rows.Count)
                    ObjetDataRow = ObjetDataSet.Tables("T_contrats").Rows(0)
                    ObjetDataRow("Fin") = Date.Today
                    ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
                    ObjetDataAdapter.Update(ObjetDataSet, "T_contrats")
                    ObjetDataSet.Clear()
                    ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
                    ObjetDataTable = ObjetDataSet.Tables("T_contrats")
                    ObjetConnection = Nothing
                    ObjetCommand = Nothing
                    ObjetDataAdapter = Nothing
                    change = True
                Else
                    change = False
                End If
    L'erreur se produit lors de l'actualisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ObjetDataRow("Fin") = Date.Today
    ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
                    ObjetDataAdapter.Update(ObjetDataSet, "T_contrats")
    J'ai cherché par tout, mais je n'arrive pas à trouver le problème...

    Est-ce que quelqu'un pourrait m'aider,
    je remercie en avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    soit tu fermes ta première connexion
    soit tu passes sur une vraie base de données
    soit tu réfléchis et tu évite de faire 2 requetes identiques vu que tu as déjà les données
    soit tu utilises autre choses que des datasets

    tu peux même mixer plusieurs de ces solutions

    de plus, mettre des objets à nothing sert en général à rien, il serait meme plus utile de les disposer (.dispose)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Merci sperot51.

    Je sais que c'est pas trop intelligent faire ces 2 requetes presque identiques, mais c'était déjà une deuxième essaye. J'ai essayé de changer pour le code ci-dessous, mais j'ai toujours le memê erreur...

    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
    strSQL = "SELECT T_contrats.* " & _
                         "FROM T_contrats " & _
                         "WHERE T_contrats.Mec='" & Me.lblCollaborateurMec.Text & "' " & _
                         "ORDER BY T_contrats.Debut DESC"
    ObjetConnection = New OleDbConnection()
    ObjetConnection.ConnectionString = DRHConn
    ObjetConnection.Open()
    ObjetCommand = New OleDbCommand(strSQL)
    ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
    ObjetCommand.Connection() = ObjetConnection
    ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
    ObjetDataTable = ObjetDataSet.Tables("T_contrats")
     
    Dim contrat As String = ObjetDataTable.Rows(0).Item("Contrat")
    Dim heures As String = ObjetDataTable.Rows(0).Item("Heures").ToString
    Dim categorie As String = ObjetDataTable.Rows(0).Item("Categorie")
    Dim change As Boolean = False
     
    If Me.cbContrat.Text <> contrat OrElse Me.txtTempsTravail.Text <> heures   OrElse Me.txtCategorie.Text <> categorie Then
        ObjetDataRow = ObjetDataSet.Tables("T_contrats").Rows(0)
        ObjetDataRow("Fin") = Date.Today
        ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
        ObjetDataAdapter.Update(ObjetDataSet, "T_contrats")
        ObjetDataSet.Clear()
        ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
        ObjetDataTable = ObjetDataSet.Tables("T_contrats")
        ObjetConnection = Nothing
        ObjetCommand = Nothing
        ObjetDataAdapter = Nothing
        change = True
    Else
        change = False
    End If
    J'arrive à prendre des valeurs pour contrat, heures et categorie, mais le concurrency error apparait toujours lorsque j'essaye de modifier le dataset...

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    essaye d'expliquer ce que tu veux faire, on verra ensuite comment ca se traduit en vb
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    J'essaye:

    J'ai un formulaire avec des champs Contrat, Heures et Categorie (ces champs viennent de la table T_contrats), parmi d'autres champs qui viennent d'une autre table.
    Lorsque l'tilisateur clique sur enregistrer, je voudrais verifier si a eu quelque changement, et dans le cas positif, enregistrer la data de fin du contrat.

    Pour verifier les changements je prends les valeurs de la ligne 0 dans contrat, heures et categorie et je fais une comparaison avec les donnés du formulaire.
    S'il y a des modifications, j'enregistre la date de fin du contrat, où l'application bug...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    J'ai essayé avec
    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
    strSQL = "SELECT T_contrats.* " & _
                         "FROM T_contrats " & _
                         "WHERE T_contrats.Mec='" & Me.lblCollaborateurMec.Text & "' " & _
                         "ORDER BY T_contrats.dtDebut DESC"
                ObjetConnection = New OleDbConnection()
                ObjetConnection.ConnectionString = DRHConn
                ObjetConnection.Open()
                ObjetCommand = New OleDbCommand(strSQL)
                ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
                ObjetCommand.Connection() = ObjetConnection
                ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
                ObjetDataTable = ObjetDataSet.Tables("T_contrats")
                MsgBox("rows: " & ObjetDataTable.Rows.Count)
                MsgBox("contrat: " & ObjetDataTable.Rows(0).Item("Contrat"))
                MsgBox("debut: " & ObjetDataTable.Rows(0).Item("dtDebut"))
     
                ObjetDataRow = ObjetDataSet.Tables("T_contrats").Rows(0)
                ObjetDataRow("dtFin") = Date.Today
                ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
                ObjetDataAdapter.Update(ObjetDataSet, "T_contrats")
                ObjetDataSet.Clear()
                ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
                ObjetDataTable = ObjetDataSet.Tables("T_contrats")
    Et j'ai toujours le memê problème...
    Je sais que le dataset est bien chargé, c'est pour ça que j'ai mis des msgbox...

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je suis pas expert en dataset, c'est un objet que je ne n'apprécie pas trop
    mais si vous utiliser un datagrid avec un dataset et que des modifs ont été apportées dans le datagrid, le dataset sait s'il y a eut des modif et serait à mon avis capable de se démerder pour faire les mises à jour sans que ca soit vous qui le vérifiez
    du moins c'est ce que je vois ici
    http://plasserre.developpez.com/cour...ees1#LXVII-B-5
    ils disent de faire un update sur le dbadapter, donc il faut vous le garder en référence pour le réutiliser

    enfin je ne comprends pas votre code ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    C'est bon sperot51, merci beaucoup en tout cas...


    Mon code est basé sur le cours que t'as indiqué, et je ne trouve pas la souce de l'erreur

    Je vais experimenter un peu plus pour essayer de trouver le problème...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Le truc que je ne comprends pas c'est que le code:
    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
    strSQL = "SELECT T_Donnes.* " & _
                         "FROM T_Donnes " & _
                         "WHERE T_Donnes.Mec='" & Me.lblCollaborateurMec.Text & "'"
                ObjetConnection = New OleDbConnection()
                ObjetConnection.ConnectionString = CollaborateursConn
                ObjetConnection.Open()
                ObjetCommand = New OleDbCommand(strSQL)
                ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
                ObjetCommand.Connection() = ObjetConnection
                ObjetDataAdapter.Fill(ObjetDataSet, "T_Donnes")
                ObjetDataTable = ObjetDataSet.Tables("T_Donnes")
                ObjetDataRow = ObjetDataSet.Tables("T_Donnes").Rows(0)
                ObjetDataRow("Mail_b") = Me.txtMailbanque.Text
                ObjetDataRow("Tel1_b") = Me.txtTelbanque1.Text
                ObjetDataRow("Tel2_b") = Me.txtTelbanque2.Text
                ObjetDataRow("Entree") = Me.dtEntree.Text
                If Me.cbSortie.Checked = True Then ObjetDataRow("Sortie") = Me.dtSortie.Text
                ObjetDataRow("Adresse_p") = Me.txtAdresse.Text
                ObjetDataRow("Adresse2_p") = Me.txtComplement.Text
                ObjetDataRow("CP_p") = Me.txtCP.Text
                ObjetDataRow("Ville_p") = Me.txtVille.Text
                ObjetDataRow("Sexe") = Me.txtSexe.Text
                ObjetDataRow("Tel1_p") = Me.txtTelperso1.Text
                ObjetDataRow("Tel2_p") = Me.txtTelperso2.Text
                ObjetDataRow("Mail_p") = Me.txtMailperso.Text
                ObjetDataRow("Naissance") = Me.dtNaissance.Text
                ObjetDataRow("Temps_travail") = Me.txtTempsTravail.Text
                ObjetDataRow("Contrat") = Me.cbContrat.Text
                ObjetDataRow("Matricule") = Me.txtMatricule.Text
                ObjetDataRow("Categorie") = Me.txtCategorie.Text
                ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
                ObjetDataAdapter.Update(ObjetDataSet, "T_Donnes")
                ObjetDataSet.Clear()
                ObjetDataAdapter.Fill(ObjetDataSet, "T_Donnes")
                ObjetDataTable = ObjetDataSet.Tables("T_Donnes")
                ObjetConnection.Close()
                ObjetConnection = Nothing
                ObjetCommand = Nothing
                ObjetDataAdapter = Nothing
    marche bien, et si je change ce memê code à (dans le memê endroit du code):
    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
    strSQL = "SELECT T_contrats.* " & _
                         "FROM T_contrats " & _
                         "WHERE T_contrats.Mec='" & Me.lblCollaborateurMec.Text & "' " & _
                         "ORDER BY T_contrats.dtDebut DESC"
                ObjetConnection = New OleDbConnection()
                ObjetConnection.ConnectionString = CollaborateursConn
                ObjetConnection.Open()
                ObjetCommand = New OleDbCommand(strSQL)
                ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
                ObjetCommand.Connection() = ObjetConnection
                ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
                ObjetDataTable = ObjetDataSet.Tables("T_contrats")
                ObjetDataRow = ObjetDataSet.Tables("T_contrats").Rows(0)
                ObjetDataRow("Contrat") = "t"
                ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
                ObjetDataAdapter.Update(ObjetDataSet, "T_contrats")
                ObjetDataSet.Clear()
                ObjetDataAdapter.Fill(ObjetDataSet, "T_contrats")
                ObjetDataTable = ObjetDataSet.Tables("T_contrats")
                ObjetConnection.Close()
                ObjetConnection = Nothing
                ObjetCommand = Nothing
                ObjetDataAdapter = Nothing
    l'erreur apparait!
    Personne a des idées?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Depuis trop chercher, j'ai changé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ObjetDataRow("Contrat") = "t"
    ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter)
    ObjetDataAdapter.Update(ObjetDataSet, "T_contrats")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim command As OleDbCommand = New OleDbCommand("UPDATE T_contrats set dtFin = #" & Date.Today & "# WHERE T_contrats.No=" & No, ObjetConnection)
    Dim affectedrows As Integer = command.ExecuteNonQuery()
    Et l'application marche bien!
    Est-ce que quelqu'un peut me dire pourquoi?

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/11/2010, 14h34
  2. oleDB - Violation de l'accès concurrentiel
    Par JbTech dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/05/2010, 17h05
  3. Réponses: 0
    Dernier message: 20/05/2010, 10h46
  4. ErrorMessage : Violation de l'accès concurrentiel
    Par mohamed301084 dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/04/2010, 10h46
  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