Violation accès concurrentiel

Résolu
cs_cybercorp Messages postés 44 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 16 août 2009 - 23 sept. 2007 à 00:44
belsuncette Messages postés 2 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 5 octobre 2007 - 5 oct. 2007 à 12:12
Bonjour
Je travaille avec VB 2005 et une base Access
J'utilise une grille pour des enregistrements journaliers.
Les enregistrement sont chargés par une instruction:
Me.PointageTableAdapter1.FillByJour(Me.P_DataSet.Pointage)

SELECT Num, Jour, H1, Nom, Prenom, Qt , H2
FROM Pointage
WHERE (Jour = ?)
ORDER BY H1

Jusque là tout va bien.

La sauvegarde des données est faite avec:
Try
Me.Validate()
Me.PSetBindingSource.EndEdit()
Me.PointageTableAdapter1.Update(Me.P_DataSet.Pointage)
Catch ex As Exception
MsgBox("Une erreur à été détectée durant la mise à jour de la base de données")
End Try
En débutant une journée, l'instruction FillBy jour ne charge aucun élément, ce qui est normal.

Lorsque je crée le premier enregistrement et que je l'enregistre, ça se passe bien.
Par contre, si je veux modifier la ligne j'ai une erreur d'accès concurentiel au moment de l'enregistrement.

Je ferme ma feuille, je l'ouvre de nouveau et là toutes les modifications s'enregistrent sans problème.

Je n'arrive pas à comprendre cette erreur.
Pouvez-vous m'aider?

Merci

<!-- / message -->



Celui qui ajoute de nouvelles connaissances aux anciennes est le véritable professeur.(Confucius)

5 réponses

cs_cybercorp Messages postés 44 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 16 août 2009
5 oct. 2007 à 01:14
J'ai enfin trouvé pourquoi j'avas l'erreur:
- Lors du remplissage du TableAdapter1 en début de journée, je n'ai aucun enregistrement. Lors de la création le premier enregistrement prend automatiquement le N° 0.
En réalité, cet enregistrement ne doit pas avoir ce numéro puisqu'il s'agit du dernier de la base de données.
Donc lors de l'enregistrement dans TableAdapter1 il n'y a pas d'erreur. Par contre lors de la modification ma base se retouve avec 2 enregistrements 0 et provoque une violation d'accès concurentiel.

Pour résoudre le problème, lors du premier enregistrement d'une journée, je rappel la méthode FillByJour et je récupère ainsi le bon numéro d'enregistrement.

Try

Me.Validate()

Me.PDataSetBindingSource.EndEdit()

Me.PointageTableAdapter1.Update(
Me.PDataSet.Pointage)

If Grid1.Rows.Count = 1
Then
Me.PointageTableAdapter1.FillByJour(
Me.PDataSet.Pointage)

End
If

Catch ex
As Exception
MsgBox(ex.Message)
'"Une erreur à été détectée durant la mise à jour de la base de données")
End
TryMerci pour votre aide

Celui qui ajoute de nouvelles connaissances aux anciennes est le véritable professeur.(Confucius)
3
ThoT49 Messages postés 153 Date d'inscription dimanche 4 mars 2007 Statut Membre Dernière intervention 24 avril 2011 2
23 sept. 2007 à 10:29
En faite dans les débuts, cela m'es déja arrivé, tu ne peux pas modifier ce que tu viens tout juste d'ajouter, pour cela, il faut bien départager la modification avec l'ajout...

Donc en faite ce qu'il faudrait, je pense, c'est gérer diférement les deux actions. D'une part tu ajoute, tu coupe la connection a ta base de donnée. Puis, tu modifi en te reconnectant a la base de donnée afin de pouvoir voir en temps réel la modification faite.

Je ne sais pas si tu me comprend mais je pense que pour ton problème c'est cela.
Si ce n'est pas le cas, c'est que il y a un problème dans ton code, et je ne fais pas de la meme façon que toi pour gérer une base access, mais j'ai regardé ce que tu as mis, je pense que cela revient au mème...

Donc bah éssai, puis bah dit nous si cela fonctionne ;)

http://ThoT-Corporation.sdz.fr/

ThoT//Dévellopeur Etudiant
0
cs_cybercorp Messages postés 44 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 16 août 2009
23 sept. 2007 à 15:26
j'ai placé l'instruction Me.PointageTableAdapter1.Connection.Open() juste après l'instruction validate

et Me.PointageClesTableAdapter1.Connection.Close()  après End try

Le problème est toujours là

Ce que je comprend pas c'est que cela ne se produit que pour le premier enregistrement de chaque journée

Celui qui ajoute de nouvelles connaissances aux anciennes est le véritable professeur.(Confucius)
0
belsuncette Messages postés 2 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 5 octobre 2007
4 oct. 2007 à 15:50
Si tu as toujours ce problème, essaie de faire un AcceptChanges() sur ton TableAdapter, comme ça il récupère tes nouvelles entrées et tu peux travailler dessus.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
belsuncette Messages postés 2 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 5 octobre 2007
5 oct. 2007 à 12:12
C'est sympa d'avoir posté car j'ai un problème du même type et ça me confirme que c'est à cause du numéro qui n'est pas le même :)
0
Rejoignez-nous