Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 14h16   #1
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Par défaut Formulaire requete jointure erreur 3200 disparait apres Requery

Bonjour,
J'ai un soucis il me faudrai de l'aide

J'ai un form1 liee a une requete avec des jointures.
J'ai un bouton dans ce formulaire qui ouvre un autre form2 en modal venant edite une information contenu dans une des tables contenu dans la jointure.

Si je modifie une des infos dans le form2, le form1 n'est pas directement mis a jour. Je fais donc un me.requery. (en passant par la fonction ci dessous)
Et la j'ai un message d'erreur : "Write conflict This record has been changed by another ..." Si je fais "Save Record", je tombe sur une erreur 3200 : the record cannot be deleted or changed because table 'tasks' includes related records'.
Cependant je n'ai ni supprime l'element, ni touche a la liaison, simplement changer une info annexe.
Si j'arrete le code, et tente de relancer le Form2, cette fois en quittant le Form2, l'info dans Form1 se met directement a jour....

Quelque chose de bizarre, si avant douvrir mon Form2, je lance mon refreshForm,
je n'ai pas d'erreur ....


Donc j'ai pour l'instant cette solution de lancer refreshForm, avant d'ouvrir le Form2, mais ca fait des calculs pour rien ....

Merci de votre aide !!


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Sub refreshForm(ByVal frmName As String, Optional ByVal ID As String = "", Optional ByVal field As String = "")
    Dim frm As Form
If CurrentProject.AllForms(frmName).IsLoaded Then
    Set frm = Forms(frmName)
    If CurrentProject.AllForms(frmName).CurrentView = acCurViewFormBrowse Then
        frm.Requery
        If Not (ID = "" And field = "") Then
            If ID = "" And field <> "" Then
                ID = frm.controls(field)
            End If
            frm.Recordset.FindFirst (field & "=" & ID)
        End If
    End If
    Set frm = Nothing
End If
End Sub
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h44   #2
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 103
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 103
Points : 8 728
Points : 8 728
Bonjour,

Je n'ai pas regardé le code en détail. Pourquoi ne pas fairedepuis le Form2 après mise à jour.

Comment tu mets à jour dans le Form2, directement dans la table ?

Dolphy
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h59   #3
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
J'ai tente un Requery depuis le form2 avec
Code :
1
2
3
Private Sub Form_AfterUpdate()
Forms![TASK].Requery
End Sub
Meme erreur.

Pour ce qui est de la mise a jour de la table a partir du Form2, je laisse faire access car c'est un formulaire liee a cette table.
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h05   #4
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 103
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 103
Points : 8 728
Points : 8 728
Citation:
Envoyé par gabvoir Voir le message
Pour ce qui est de la mise a jour de la table a partir du Form2, je laisse faire access car c'est un formulaire liee a cette table.
Je pense que c'est ici qu'il y a le conflit. Il faudrait que tu libère l'enregistrement avant de faire la mise à jour, tu as encore besoin du Form2 après la modif. Le tout serait de modifier puis lors du retour sur le form1 mettre à jour.

Dolphy
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h31   #5
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 41
Points : 41
Envoyer un message via MSN à gabvoir
Actuellement si je fait une mise a jour dans Form2 que je le ferme, j'affiche la table Table2, elle a bien ete mise a jour. C'est seulement l'affichage du champs dans Form1 qui n'est pas mis a jour.

Et si je tente de faire un me.requery c'est la que l'erreur arrive, le probleme est bel et bien sur Form1.

Et encrivant les phrases au dessus je viens effectivement de trouver le probleme.
Je me suis attarde sur les events du form1,
Et en fait j'ai OnCurrent du form1 qui me change automatiquement un champ.
De ce fait des l'ouverture l'enregistrement est modifie, et passe en dirty.
En modifiant, certe indirect l'enregistrement il y a effectivement conflit.

La solution a donc ete, de rajouter un me.dirty = false a la fin du current.
Code :
1
2
3
4
Private Sub Form_Current()
Me![photo] = Fonction()
Me.dirty = False
End sub
Merci pour ton aide qui m'a permis de me dire que le probleme venait de Form1 et non de form2

gabvoir
gabvoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h48   #6
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 103
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 103
Points : 8 728
Points : 8 728


Dolphy
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h41.


 
 
 
 
Partenaires

Hébergement Web