Violation accès concurrentiel [Résolu]

cs_cybercorp
Messages postés
44
Date d'inscription
lundi 1 avril 2002
Dernière intervention
16 août 2009
- 23 sept. 2007 à 00:44 - Dernière réponse : belsuncette
Messages postés
2
Date d'inscription
jeudi 4 octobre 2007
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)
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_cybercorp
Messages postés
44
Date d'inscription
lundi 1 avril 2002
Dernière intervention
16 août 2009
- 5 oct. 2007 à 01:14
3
Merci
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)

Merci cs_cybercorp 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_cybercorp
ThoT49
Messages postés
153
Date d'inscription
dimanche 4 mars 2007
Dernière intervention
24 avril 2011
- 23 sept. 2007 à 10:29
0
Merci
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
Commenter la réponse de ThoT49
cs_cybercorp
Messages postés
44
Date d'inscription
lundi 1 avril 2002
Dernière intervention
16 août 2009
- 23 sept. 2007 à 15:26
0
Merci
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)
Commenter la réponse de cs_cybercorp
belsuncette
Messages postés
2
Date d'inscription
jeudi 4 octobre 2007
Dernière intervention
5 octobre 2007
- 4 oct. 2007 à 15:50
0
Merci
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.
Commenter la réponse de belsuncette
belsuncette
Messages postés
2
Date d'inscription
jeudi 4 octobre 2007
Dernière intervention
5 octobre 2007
- 5 oct. 2007 à 12:12
0
Merci
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 :)
Commenter la réponse de belsuncette

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.