je pense avoir trouvé un bug (énorme) dans access 2K (toutes les mises à
jour sont installées.
J'ai un formulaire continu, basé sur une requête où les mises à jour
sont permises. La requête comprend un order by. Le formulaire ne
comprend ni orderby ni filtre.
J'ai un champs oui/non nommé [Séance Prestée].
J'ai un champs numérique [Nb1] que je positionne à l'ouverture du
formulaire et lorsque ce champs oui/non [Scéance prestée] est modifié.
But du jeu: faire +1 chaque fois qu'une scéance est prestée et avoir un
listing du type:
seance nb1
xxxx Oui 1
xxxx Oui 2
xxxx Non
xxxx Oui 3
xxxx Oui 4
xxxx Non
xxxx Oui 5
xxxx Oui 6
xxxx Non
xxxx Oui 7
J'ai écrit une méthode qui calcule le compteur en parcourant le
recordsetclone de début à la fin:
Private Sub update_nb1()
Dim i As Integer, r As Recordset
i = 0
Set r = Me.RecordsetClone
If Not (r.EOF And r.BOF) Then
r.MoveFirst
While Not r.EOF
If r![Scéance prestée] Then
i = i + 1
' update nb1
If Nz(r!Nb1, -1) <> i + 1 Then
r.Edit
r!Nb1 = i
r.Update
End If
Else
' update nb1
If Not IsNull(r!Nb1) Then
r.Edit
r!Nb1 = Null
r.Update
End If
End If
r.MoveNext
Wend
End If
Set r = Nothing
End Sub
Cette méthode est donc exécutée à l'ouverture et dans l'évènement
AfterUpdate de la zone [Séance prestée]. Ca a l'air de fonctionner à
priori... sauf que la lorque je modifie une ligne, ca ne marche pas: la
nouvelle valeur de [Séance prestée] n'est pas prise en compte!!!!
J'ai modifié le code en faisant (c'est tordu, et vraiment pas propre,
mais c'est le seul moyen qui marche! (sic) ):
Private Sub update_nb1()
Dim i As Integer, r As Recordset, b As Boolean
i = 0
Set r = Me.RecordsetClone
If Not (r.EOF And r.BOF) Then
r.MoveFirst
While Not r.EOF
b = Me.Recordset.EOF And Me.Recordset.BOF
If Not b Then b = Me.Recordset!ID = r!ID
If b Then ' si current record, update formulaire
If Me![Scéance prestée] Then
i = i + 1
' update nb1
If Me!Nb1 & "" <> i & "" Then
Me.Recordset.Edit
Me.Recordset!Nb1 = i
Me.Recordset.Update
End If
Else
' update nb1
If Me!Nb1 & "" > "" Then
Me.Recordset.Edit
Me.Recordset!Nb1 = Null
Me.Recordset.Update
End If
End If
Else' update recordsetclone
If r![Scéance prestée] Then
i = i + 1
' update nb1
If Nz(r!Nb1, -1) <> i Then
r.Edit
r!Nb1 = i
r.Update
End If
Else
' update nb1
If r!Nb1 & "" > "" Then
r.Edit
r!Nb1 = Null
r.Update
End If
End If
End If
r.MoveNext
Wend
End If
Set r = Nothing
Me.Requery
Me.Refresh
End Sub
Ca a l'air de marcher de prime abord.
Mais si je modifie la 5e ligne puis que je modifie la première ligne,
il se plante sur Me.Recordset!ID = r!ID, car Me.Recordset!ID n'est plus
accessible (no current record), alors que je viens de modifier la
ligne!!!!!!!
Quelqu'un peut-il m'expliquer pourquoi??????????????????????????? Et
comment contourner?
Alain Bourgeois
www.self-mail.com
www.kineuro.com
PS: si vous pouviez mettre mon e-mail en cc de votre réponse, ce serait
génial.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Michel Walsh
Salut,
SELECT a.SéanceID, LAST(a.[Séance Prestée]), COUNT(*) FROM maTable As a INNER JOIN maTable As b ON a.SéanceID>=b.SéanceID WHERE b.[Séance Prestée]
Cela suppose que [Séance Prestée] est booléen, et que SéanceID augmente selon la chronologie ( SéanceID 3 a lieu avant SéanceID4 )
Espérant être utile, Vanderghast, Access MVP
"Alain Bourgeois" wrote in message news:
Chers tous,
je pense avoir trouvé un bug (énorme) dans access 2K (toutes les mises à jour sont installées.
J'ai un formulaire continu, basé sur une requête où les mises à jour sont permises. La requête comprend un order by. Le formulaire ne comprend ni orderby ni filtre. J'ai un champs oui/non nommé [Séance Prestée]. J'ai un champs numérique [Nb1] que je positionne à l'ouverture du formulaire et lorsque ce champs oui/non [Scéance prestée] est modifié.
But du jeu: faire +1 chaque fois qu'une scéance est prestée et avoir un listing du type: seance nb1 xxxx Oui 1 xxxx Oui 2 xxxx Non xxxx Oui 3 xxxx Oui 4 xxxx Non xxxx Oui 5 xxxx Oui 6 xxxx Non xxxx Oui 7
J'ai écrit une méthode qui calcule le compteur en parcourant le recordsetclone de début à la fin:
Private Sub update_nb1() Dim i As Integer, r As Recordset i = 0 Set r = Me.RecordsetClone If Not (r.EOF And r.BOF) Then r.MoveFirst While Not r.EOF If r![Scéance prestée] Then i = i + 1 ' update nb1 If Nz(r!Nb1, -1) <> i + 1 Then r.Edit r!Nb1 = i r.Update End If Else ' update nb1 If Not IsNull(r!Nb1) Then r.Edit r!Nb1 = Null r.Update End If End If r.MoveNext Wend End If Set r = Nothing
End Sub
Cette méthode est donc exécutée à l'ouverture et dans l'évènement AfterUpdate de la zone [Séance prestée]. Ca a l'air de fonctionner à priori... sauf que la lorque je modifie une ligne, ca ne marche pas: la nouvelle valeur de [Séance prestée] n'est pas prise en compte!!!!
J'ai modifié le code en faisant (c'est tordu, et vraiment pas propre, mais c'est le seul moyen qui marche! (sic) ): Private Sub update_nb1() Dim i As Integer, r As Recordset, b As Boolean i = 0 Set r = Me.RecordsetClone If Not (r.EOF And r.BOF) Then r.MoveFirst While Not r.EOF b = Me.Recordset.EOF And Me.Recordset.BOF If Not b Then b = Me.Recordset!ID = r!ID If b Then ' si current record, update formulaire If Me![Scéance prestée] Then i = i + 1 ' update nb1 If Me!Nb1 & "" <> i & "" Then Me.Recordset.Edit Me.Recordset!Nb1 = i Me.Recordset.Update End If Else ' update nb1 If Me!Nb1 & "" > "" Then Me.Recordset.Edit Me.Recordset!Nb1 = Null Me.Recordset.Update End If End If Else' update recordsetclone If r![Scéance prestée] Then i = i + 1 ' update nb1 If Nz(r!Nb1, -1) <> i Then r.Edit r!Nb1 = i r.Update End If Else ' update nb1 If r!Nb1 & "" > "" Then r.Edit r!Nb1 = Null r.Update End If End If End If r.MoveNext Wend End If Set r = Nothing Me.Requery Me.Refresh End Sub
Ca a l'air de marcher de prime abord.
Mais si je modifie la 5e ligne puis que je modifie la première ligne, il se plante sur Me.Recordset!ID = r!ID, car Me.Recordset!ID n'est plus accessible (no current record), alors que je viens de modifier la ligne!!!!!!!
Quelqu'un peut-il m'expliquer pourquoi??????????????????????????? Et comment contourner?
Alain Bourgeois www.self-mail.com www.kineuro.com
PS: si vous pouviez mettre mon e-mail en cc de votre réponse, ce serait génial.
Salut,
SELECT a.SéanceID, LAST(a.[Séance Prestée]), COUNT(*)
FROM maTable As a INNER JOIN maTable As b
ON a.SéanceID>=b.SéanceID
WHERE b.[Séance Prestée]
Cela suppose que [Séance Prestée] est booléen, et que SéanceID augmente
selon la chronologie ( SéanceID 3 a lieu avant SéanceID4 )
Espérant être utile,
Vanderghast, Access MVP
"Alain Bourgeois" <bk332951@skynet.be> wrote in message
news:416AF5BC.A0CBA23A@skynet.be...
Chers tous,
je pense avoir trouvé un bug (énorme) dans access 2K (toutes les mises à
jour sont installées.
J'ai un formulaire continu, basé sur une requête où les mises à jour
sont permises. La requête comprend un order by. Le formulaire ne
comprend ni orderby ni filtre.
J'ai un champs oui/non nommé [Séance Prestée].
J'ai un champs numérique [Nb1] que je positionne à l'ouverture du
formulaire et lorsque ce champs oui/non [Scéance prestée] est modifié.
But du jeu: faire +1 chaque fois qu'une scéance est prestée et avoir un
listing du type:
seance nb1
xxxx Oui 1
xxxx Oui 2
xxxx Non
xxxx Oui 3
xxxx Oui 4
xxxx Non
xxxx Oui 5
xxxx Oui 6
xxxx Non
xxxx Oui 7
J'ai écrit une méthode qui calcule le compteur en parcourant le
recordsetclone de début à la fin:
Private Sub update_nb1()
Dim i As Integer, r As Recordset
i = 0
Set r = Me.RecordsetClone
If Not (r.EOF And r.BOF) Then
r.MoveFirst
While Not r.EOF
If r![Scéance prestée] Then
i = i + 1
' update nb1
If Nz(r!Nb1, -1) <> i + 1 Then
r.Edit
r!Nb1 = i
r.Update
End If
Else
' update nb1
If Not IsNull(r!Nb1) Then
r.Edit
r!Nb1 = Null
r.Update
End If
End If
r.MoveNext
Wend
End If
Set r = Nothing
End Sub
Cette méthode est donc exécutée à l'ouverture et dans l'évènement
AfterUpdate de la zone [Séance prestée]. Ca a l'air de fonctionner à
priori... sauf que la lorque je modifie une ligne, ca ne marche pas: la
nouvelle valeur de [Séance prestée] n'est pas prise en compte!!!!
J'ai modifié le code en faisant (c'est tordu, et vraiment pas propre,
mais c'est le seul moyen qui marche! (sic) ):
Private Sub update_nb1()
Dim i As Integer, r As Recordset, b As Boolean
i = 0
Set r = Me.RecordsetClone
If Not (r.EOF And r.BOF) Then
r.MoveFirst
While Not r.EOF
b = Me.Recordset.EOF And Me.Recordset.BOF
If Not b Then b = Me.Recordset!ID = r!ID
If b Then ' si current record, update formulaire
If Me![Scéance prestée] Then
i = i + 1
' update nb1
If Me!Nb1 & "" <> i & "" Then
Me.Recordset.Edit
Me.Recordset!Nb1 = i
Me.Recordset.Update
End If
Else
' update nb1
If Me!Nb1 & "" > "" Then
Me.Recordset.Edit
Me.Recordset!Nb1 = Null
Me.Recordset.Update
End If
End If
Else' update recordsetclone
If r![Scéance prestée] Then
i = i + 1
' update nb1
If Nz(r!Nb1, -1) <> i Then
r.Edit
r!Nb1 = i
r.Update
End If
Else
' update nb1
If r!Nb1 & "" > "" Then
r.Edit
r!Nb1 = Null
r.Update
End If
End If
End If
r.MoveNext
Wend
End If
Set r = Nothing
Me.Requery
Me.Refresh
End Sub
Ca a l'air de marcher de prime abord.
Mais si je modifie la 5e ligne puis que je modifie la première ligne,
il se plante sur Me.Recordset!ID = r!ID, car Me.Recordset!ID n'est plus
accessible (no current record), alors que je viens de modifier la
ligne!!!!!!!
Quelqu'un peut-il m'expliquer pourquoi??????????????????????????? Et
comment contourner?
Alain Bourgeois
www.self-mail.com
www.kineuro.com
PS: si vous pouviez mettre mon e-mail en cc de votre réponse, ce serait
génial.
SELECT a.SéanceID, LAST(a.[Séance Prestée]), COUNT(*) FROM maTable As a INNER JOIN maTable As b ON a.SéanceID>=b.SéanceID WHERE b.[Séance Prestée]
Cela suppose que [Séance Prestée] est booléen, et que SéanceID augmente selon la chronologie ( SéanceID 3 a lieu avant SéanceID4 )
Espérant être utile, Vanderghast, Access MVP
"Alain Bourgeois" wrote in message news:
Chers tous,
je pense avoir trouvé un bug (énorme) dans access 2K (toutes les mises à jour sont installées.
J'ai un formulaire continu, basé sur une requête où les mises à jour sont permises. La requête comprend un order by. Le formulaire ne comprend ni orderby ni filtre. J'ai un champs oui/non nommé [Séance Prestée]. J'ai un champs numérique [Nb1] que je positionne à l'ouverture du formulaire et lorsque ce champs oui/non [Scéance prestée] est modifié.
But du jeu: faire +1 chaque fois qu'une scéance est prestée et avoir un listing du type: seance nb1 xxxx Oui 1 xxxx Oui 2 xxxx Non xxxx Oui 3 xxxx Oui 4 xxxx Non xxxx Oui 5 xxxx Oui 6 xxxx Non xxxx Oui 7
J'ai écrit une méthode qui calcule le compteur en parcourant le recordsetclone de début à la fin:
Private Sub update_nb1() Dim i As Integer, r As Recordset i = 0 Set r = Me.RecordsetClone If Not (r.EOF And r.BOF) Then r.MoveFirst While Not r.EOF If r![Scéance prestée] Then i = i + 1 ' update nb1 If Nz(r!Nb1, -1) <> i + 1 Then r.Edit r!Nb1 = i r.Update End If Else ' update nb1 If Not IsNull(r!Nb1) Then r.Edit r!Nb1 = Null r.Update End If End If r.MoveNext Wend End If Set r = Nothing
End Sub
Cette méthode est donc exécutée à l'ouverture et dans l'évènement AfterUpdate de la zone [Séance prestée]. Ca a l'air de fonctionner à priori... sauf que la lorque je modifie une ligne, ca ne marche pas: la nouvelle valeur de [Séance prestée] n'est pas prise en compte!!!!
J'ai modifié le code en faisant (c'est tordu, et vraiment pas propre, mais c'est le seul moyen qui marche! (sic) ): Private Sub update_nb1() Dim i As Integer, r As Recordset, b As Boolean i = 0 Set r = Me.RecordsetClone If Not (r.EOF And r.BOF) Then r.MoveFirst While Not r.EOF b = Me.Recordset.EOF And Me.Recordset.BOF If Not b Then b = Me.Recordset!ID = r!ID If b Then ' si current record, update formulaire If Me![Scéance prestée] Then i = i + 1 ' update nb1 If Me!Nb1 & "" <> i & "" Then Me.Recordset.Edit Me.Recordset!Nb1 = i Me.Recordset.Update End If Else ' update nb1 If Me!Nb1 & "" > "" Then Me.Recordset.Edit Me.Recordset!Nb1 = Null Me.Recordset.Update End If End If Else' update recordsetclone If r![Scéance prestée] Then i = i + 1 ' update nb1 If Nz(r!Nb1, -1) <> i Then r.Edit r!Nb1 = i r.Update End If Else ' update nb1 If r!Nb1 & "" > "" Then r.Edit r!Nb1 = Null r.Update End If End If End If r.MoveNext Wend End If Set r = Nothing Me.Requery Me.Refresh End Sub
Ca a l'air de marcher de prime abord.
Mais si je modifie la 5e ligne puis que je modifie la première ligne, il se plante sur Me.Recordset!ID = r!ID, car Me.Recordset!ID n'est plus accessible (no current record), alors que je viens de modifier la ligne!!!!!!!
Quelqu'un peut-il m'expliquer pourquoi??????????????????????????? Et comment contourner?
Alain Bourgeois www.self-mail.com www.kineuro.com
PS: si vous pouviez mettre mon e-mail en cc de votre réponse, ce serait génial.