Je suis sous access 97. J'ai une table qui contient une douzaine de
champs et un formulaire bas=E9 sur cette table qui me permet d'entrer
des nouveaux enregistrements dans ma base de donn=E9es.
J'ai un champ NoFA (avec Indexed Yes (Duplicates OK)) qui
m'incr=E9mente mon num=E9ro parfaitement, voici le code :
Code :
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs =3D CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot)
Me!NoFA =3D 1
rs.MoveLast
Me!NoFA =3D rs!NoFA + 1
rs.Close
Set rs =3D Nothing
End Sub
Code qui m'incremente de 1 =E0 chaque nouvel enregistrement. J'ai
r=E9ussi =E0 avoir ceci :
No Client
1 toto
4 tata
12 titi
7 tutu
L=E0 c'est moi qui mets le num=E9ro que je veux. j'ai reussi =E0 ce que
dans l'enregistrement suivant, sans que je touche au num=E9ro NoFA, que
NoFA ait le num=E9ro 8.
Donc obtenir le num=E9ro qui suit celui du dernier enregistrement
entr=E9.
Mais je viens de m'apercevoir qu'il y a une erreur qui se produit a
chaque fois que je reouvre le formulaire !
En fait le syst=E8me que je voulais marche parfaitement mais le souci
est que quand je reouvre le formulaire, il m'inverse les deux derniers
enregistrements
dans mon cas :
table datasheet
1203
1204
formulaire
1204
1203
Et apr=E8s, impossible de recommencer =E0 incrementer de la m=EAme fa=E7on
que je vous ai montr=E9.
C'est-=E0-dire que si apres 1204 et 1203 j'=E9cris 2500 pour
l'enregistrement suivant celui d'apres aura le num=E9ro 1205 et celui
d'apres 1205 ! alors que je voudrais le 2501.
C'est trop bizarre !
Par contre au tout d=E9but quand j'ai entr=E9 plus de 70 enregistrements
de cette fa=E7on sans fermer le formulaire, aucun probl=E8me.
Quelqu'un aurait-il une id=E9e pour mon souci ? Je remercie d=E9j=E0 tous
ceux qui m'aideront =E0 r=E9soudre mon dernier probl=E8me.
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
Raymond [mvp]
Bonjour.
il ne faut pas procéder ainsi car tu ne peux pas savoir si le dernier enregistrement est bien physiquement ou logiquement le dernier (pas de tri indiqué) utilise plutôt la fonction Dmax qui ira chercher le numéro de plus forte valeur. voir une exemple de création de numéro sur: http://officesystem.access.free.fr/ex_numauto_personnel.htm
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://www.mpfa.info/ pour débuter sur le forum. Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le parler: http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" a écrit dans le message de news:
Bonjour a tous !
Je suis sous access 97. J'ai une table qui contient une douzaine de champs et un formulaire basé sur cette table qui me permet d'entrer des nouveaux enregistrements dans ma base de données. J'ai un champ NoFA (avec Indexed Yes (Duplicates OK)) qui m'incrémente mon numéro parfaitement, voici le code :
Code : Private Sub Form_BeforeInsert(Cancel As Integer) Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot) Me!NoFA = 1 rs.MoveLast Me!NoFA = rs!NoFA + 1 rs.Close Set rs = Nothing End Sub
Code qui m'incremente de 1 à chaque nouvel enregistrement. J'ai réussi à avoir ceci :
No Client 1 toto 4 tata 12 titi 7 tutu
Là c'est moi qui mets le numéro que je veux. j'ai reussi à ce que dans l'enregistrement suivant, sans que je touche au numéro NoFA, que NoFA ait le numéro 8. Donc obtenir le numéro qui suit celui du dernier enregistrement entré.
Mais je viens de m'apercevoir qu'il y a une erreur qui se produit a chaque fois que je reouvre le formulaire ! En fait le système que je voulais marche parfaitement mais le souci est que quand je reouvre le formulaire, il m'inverse les deux derniers enregistrements dans mon cas :
table datasheet 1203 1204
formulaire 1204 1203
Et après, impossible de recommencer à incrementer de la même façon que je vous ai montré. C'est-à-dire que si apres 1204 et 1203 j'écris 2500 pour l'enregistrement suivant celui d'apres aura le numéro 1205 et celui d'apres 1205 ! alors que je voudrais le 2501. C'est trop bizarre ! Par contre au tout début quand j'ai entré plus de 70 enregistrements de cette façon sans fermer le formulaire, aucun problème.
Quelqu'un aurait-il une idée pour mon souci ? Je remercie déjà tous ceux qui m'aideront à résoudre mon dernier problème.
Merci
Bonjour.
il ne faut pas procéder ainsi car tu ne peux pas savoir si le dernier
enregistrement est bien physiquement ou logiquement le dernier (pas de tri
indiqué)
utilise plutôt la fonction Dmax qui ira chercher le numéro de plus forte
valeur.
voir une exemple de création de numéro sur:
http://officesystem.access.free.fr/ex_numauto_personnel.htm
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le
parler:
http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" <pascal913@hotmail.fr> a écrit dans le message de news:
1154509247.243344.62670@h48g2000cwc.googlegroups.com...
Bonjour a tous !
Je suis sous access 97. J'ai une table qui contient une douzaine de
champs et un formulaire basé sur cette table qui me permet d'entrer
des nouveaux enregistrements dans ma base de données.
J'ai un champ NoFA (avec Indexed Yes (Duplicates OK)) qui
m'incrémente mon numéro parfaitement, voici le code :
Code :
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot)
Me!NoFA = 1
rs.MoveLast
Me!NoFA = rs!NoFA + 1
rs.Close
Set rs = Nothing
End Sub
Code qui m'incremente de 1 à chaque nouvel enregistrement. J'ai
réussi à avoir ceci :
No Client
1 toto
4 tata
12 titi
7 tutu
Là c'est moi qui mets le numéro que je veux. j'ai reussi à ce que
dans l'enregistrement suivant, sans que je touche au numéro NoFA, que
NoFA ait le numéro 8.
Donc obtenir le numéro qui suit celui du dernier enregistrement
entré.
Mais je viens de m'apercevoir qu'il y a une erreur qui se produit a
chaque fois que je reouvre le formulaire !
En fait le système que je voulais marche parfaitement mais le souci
est que quand je reouvre le formulaire, il m'inverse les deux derniers
enregistrements
dans mon cas :
table datasheet
1203
1204
formulaire
1204
1203
Et après, impossible de recommencer à incrementer de la même façon
que je vous ai montré.
C'est-à-dire que si apres 1204 et 1203 j'écris 2500 pour
l'enregistrement suivant celui d'apres aura le numéro 1205 et celui
d'apres 1205 ! alors que je voudrais le 2501.
C'est trop bizarre !
Par contre au tout début quand j'ai entré plus de 70 enregistrements
de cette façon sans fermer le formulaire, aucun problème.
Quelqu'un aurait-il une idée pour mon souci ? Je remercie déjà tous
ceux qui m'aideront à résoudre mon dernier problème.
il ne faut pas procéder ainsi car tu ne peux pas savoir si le dernier enregistrement est bien physiquement ou logiquement le dernier (pas de tri indiqué) utilise plutôt la fonction Dmax qui ira chercher le numéro de plus forte valeur. voir une exemple de création de numéro sur: http://officesystem.access.free.fr/ex_numauto_personnel.htm
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://www.mpfa.info/ pour débuter sur le forum. Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le parler: http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" a écrit dans le message de news:
Bonjour a tous !
Je suis sous access 97. J'ai une table qui contient une douzaine de champs et un formulaire basé sur cette table qui me permet d'entrer des nouveaux enregistrements dans ma base de données. J'ai un champ NoFA (avec Indexed Yes (Duplicates OK)) qui m'incrémente mon numéro parfaitement, voici le code :
Code : Private Sub Form_BeforeInsert(Cancel As Integer) Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot) Me!NoFA = 1 rs.MoveLast Me!NoFA = rs!NoFA + 1 rs.Close Set rs = Nothing End Sub
Code qui m'incremente de 1 à chaque nouvel enregistrement. J'ai réussi à avoir ceci :
No Client 1 toto 4 tata 12 titi 7 tutu
Là c'est moi qui mets le numéro que je veux. j'ai reussi à ce que dans l'enregistrement suivant, sans que je touche au numéro NoFA, que NoFA ait le numéro 8. Donc obtenir le numéro qui suit celui du dernier enregistrement entré.
Mais je viens de m'apercevoir qu'il y a une erreur qui se produit a chaque fois que je reouvre le formulaire ! En fait le système que je voulais marche parfaitement mais le souci est que quand je reouvre le formulaire, il m'inverse les deux derniers enregistrements dans mon cas :
table datasheet 1203 1204
formulaire 1204 1203
Et après, impossible de recommencer à incrementer de la même façon que je vous ai montré. C'est-à-dire que si apres 1204 et 1203 j'écris 2500 pour l'enregistrement suivant celui d'apres aura le numéro 1205 et celui d'apres 1205 ! alors que je voudrais le 2501. C'est trop bizarre ! Par contre au tout début quand j'ai entré plus de 70 enregistrements de cette façon sans fermer le formulaire, aucun problème.
Quelqu'un aurait-il une idée pour mon souci ? Je remercie déjà tous ceux qui m'aideront à résoudre mon dernier problème.
Merci
pascal913
Merci Raymond[mvp] de m'avoir répondu mais le truc c'est que j'avais déjà essayé cette fonction mais sans succès. Peut être alors sais-tu comment l'intégrer dans mon code et dans mon cas ? Parce que je ne fais que des essais grace a ton lien mais rien ne marche.
Merci d'avance.
Merci Raymond[mvp] de m'avoir répondu mais le truc c'est que j'avais
déjà essayé cette fonction mais sans succès. Peut être alors
sais-tu comment l'intégrer dans mon code et dans mon cas ? Parce que
je ne fais que des essais grace a ton lien mais rien ne marche.
Merci Raymond[mvp] de m'avoir répondu mais le truc c'est que j'avais déjà essayé cette fonction mais sans succès. Peut être alors sais-tu comment l'intégrer dans mon code et dans mon cas ? Parce que je ne fais que des essais grace a ton lien mais rien ne marche.
Merci d'avance.
Raymond [mvp]
remplace ta procédure: Private Sub Form_BeforeInsert(Cancel As Integer) Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot) Me!NoFA = 1 rs.MoveLast Me!NoFA = rs!NoFA + 1 rs.Close Set rs = Nothing End Sub
par : Private Sub Form_BeforeInsert(Cancel As Integer) Me!NoFA = DMax("NoFA", "matable") + 1 End Sub
matable est le nom exact de ta table. qu'est-ce que ça dit ? -- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://www.mpfa.info/ pour débuter sur le forum. Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le parler: http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" a écrit dans le message de news:
Merci Raymond[mvp] de m'avoir répondu mais le truc c'est que j'avais déjà essayé cette fonction mais sans succès. Peut être alors sais-tu comment l'intégrer dans mon code et dans mon cas ? Parce que je ne fais que des essais grace a ton lien mais rien ne marche.
Merci d'avance.
remplace ta procédure:
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot)
Me!NoFA = 1
rs.MoveLast
Me!NoFA = rs!NoFA + 1
rs.Close
Set rs = Nothing
End Sub
par :
Private Sub Form_BeforeInsert(Cancel As Integer)
Me!NoFA = DMax("NoFA", "matable") + 1
End Sub
matable est le nom exact de ta table.
qu'est-ce que ça dit ?
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le
parler:
http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" <pascal913@hotmail.fr> a écrit dans le message de news:
1154511516.119774.185720@m79g2000cwm.googlegroups.com...
Merci Raymond[mvp] de m'avoir répondu mais le truc c'est que j'avais
déjà essayé cette fonction mais sans succès. Peut être alors
sais-tu comment l'intégrer dans mon code et dans mon cas ? Parce que
je ne fais que des essais grace a ton lien mais rien ne marche.
remplace ta procédure: Private Sub Form_BeforeInsert(Cancel As Integer) Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot) Me!NoFA = 1 rs.MoveLast Me!NoFA = rs!NoFA + 1 rs.Close Set rs = Nothing End Sub
par : Private Sub Form_BeforeInsert(Cancel As Integer) Me!NoFA = DMax("NoFA", "matable") + 1 End Sub
matable est le nom exact de ta table. qu'est-ce que ça dit ? -- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://www.mpfa.info/ pour débuter sur le forum. Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le parler: http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" a écrit dans le message de news:
Merci Raymond[mvp] de m'avoir répondu mais le truc c'est que j'avais déjà essayé cette fonction mais sans succès. Peut être alors sais-tu comment l'intégrer dans mon code et dans mon cas ? Parce que je ne fais que des essais grace a ton lien mais rien ne marche.
Merci d'avance.
pascal913
Si je prends le code que tu m'as montré, mon numéro va s'incrémenter par rapport au numéro le plus grand et non pas le dernier écrit.
Merci pour ton aide.
Si je prends le code que tu m'as montré, mon numéro va s'incrémenter
par rapport au numéro le plus grand et non pas le dernier écrit.
Si je prends le code que tu m'as montré, mon numéro va s'incrémenter par rapport au numéro le plus grand et non pas le dernier écrit.
Merci pour ton aide.
Raymond [mvp]
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas partir sur ce shéma. il te faut donc placer ce numéro dans une table paramètres et aller le chercher dans ta procédure. dans l'événement afterupdate, tu iras replacer le numéro réel créé dans la table paramètres.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://www.mpfa.info/ pour débuter sur le forum. Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le parler: http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" a écrit dans le message de news:
Si je prends le code que tu m'as montré, mon numéro va s'incrémenter par rapport au numéro le plus grand et non pas le dernier écrit.
Merci pour ton aide.
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas
partir sur ce shéma.
il te faut donc placer ce numéro dans une table paramètres et aller le
chercher dans ta procédure.
dans l'événement afterupdate, tu iras replacer le numéro réel créé dans la
table paramètres.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le
parler:
http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" <pascal913@hotmail.fr> a écrit dans le message de news:
1154512554.597252.213800@b28g2000cwb.googlegroups.com...
Si je prends le code que tu m'as montré, mon numéro va s'incrémenter
par rapport au numéro le plus grand et non pas le dernier écrit.
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas partir sur ce shéma. il te faut donc placer ce numéro dans une table paramètres et aller le chercher dans ta procédure. dans l'événement afterupdate, tu iras replacer le numéro réel créé dans la table paramètres.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://www.mpfa.info/ pour débuter sur le forum. Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le parler: http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" a écrit dans le message de news:
Si je prends le code que tu m'as montré, mon numéro va s'incrémenter par rapport au numéro le plus grand et non pas le dernier écrit.
Merci pour ton aide.
pascal913
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas partir sur ce shéma.
J'y suis obligé malheureusement...
il te faut donc placer ce numéro dans une table paramètres et aller le chercher dans ta procédure. dans l'événement afterupdate, tu iras replacer le numéro réel cr éé dans la table paramètres.
Peux tu me préciser lol j'ai pas trop bien capté ce que tu m'as dis. Si ce que tu dis fonctionne, cela fera-t-il ce que je souhaite faire ?
Merci d'avance.
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas
partir sur ce shéma.
J'y suis obligé malheureusement...
il te faut donc placer ce numéro dans une table paramètres et aller le
chercher dans ta procédure.
dans l'événement afterupdate, tu iras replacer le numéro réel cr éé dans la
table paramètres.
Peux tu me préciser lol j'ai pas trop bien capté ce que tu m'as dis.
Si ce que tu dis fonctionne, cela fera-t-il ce que je souhaite faire ?
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas partir sur ce shéma.
J'y suis obligé malheureusement...
il te faut donc placer ce numéro dans une table paramètres et aller le chercher dans ta procédure. dans l'événement afterupdate, tu iras replacer le numéro réel cr éé dans la table paramètres.
Peux tu me préciser lol j'ai pas trop bien capté ce que tu m'as dis. Si ce que tu dis fonctionne, cela fera-t-il ce que je souhaite faire ?
Merci d'avance.
Raymond [mvp]
tu crées une table avec un seul champ (T_NUM) et un seul enregistrement . dans ta procédure tu vas chercher ce numéro, si besoin, par un DLookup et tu lui rajoutes 1. lorsque tu as mis à jour, tu vas réécrire le champ avec la valeur que tu as choisie, par une requête ou un recordset.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://www.mpfa.info/ pour débuter sur le forum. Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le parler: http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" a écrit dans le message de news:
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas partir sur ce shéma.
J'y suis obligé malheureusement...
il te faut donc placer ce numéro dans une table paramètres et aller le chercher dans ta procédure. dans l'événement afterupdate, tu iras replacer le numéro réel créé dans la table paramètres.
Peux tu me préciser lol j'ai pas trop bien capté ce que tu m'as dis. Si ce que tu dis fonctionne, cela fera-t-il ce que je souhaite faire ?
Merci d'avance.
tu crées une table avec un seul champ (T_NUM) et un seul enregistrement .
dans ta procédure tu vas chercher ce numéro, si besoin, par un DLookup et tu
lui rajoutes 1.
lorsque tu as mis à jour, tu vas réécrire le champ avec la valeur que tu as
choisie, par une requête ou un recordset.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le
parler:
http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" <pascal913@hotmail.fr> a écrit dans le message de news:
1154516298.652471.46620@h48g2000cwc.googlegroups.com...
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas
partir sur ce shéma.
J'y suis obligé malheureusement...
il te faut donc placer ce numéro dans une table paramètres et aller le
chercher dans ta procédure.
dans l'événement afterupdate, tu iras replacer le numéro réel créé dans la
table paramètres.
Peux tu me préciser lol j'ai pas trop bien capté ce que tu m'as dis.
Si ce que tu dis fonctionne, cela fera-t-il ce que je souhaite faire ?
tu crées une table avec un seul champ (T_NUM) et un seul enregistrement . dans ta procédure tu vas chercher ce numéro, si besoin, par un DLookup et tu lui rajoutes 1. lorsque tu as mis à jour, tu vas réécrire le champ avec la valeur que tu as choisie, par une requête ou un recordset.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://www.mpfa.info/ pour débuter sur le forum. Découvrez le Jargonaute, le langage IT, tel que vous n'avez jamais osé le parler: http://www.microsoft.com/france/communautes/jargonaute/
"pascal913" a écrit dans le message de news:
le dernier écrit n'est pas toujours en dernière position et tu ne peux pas partir sur ce shéma.
J'y suis obligé malheureusement...
il te faut donc placer ce numéro dans une table paramètres et aller le chercher dans ta procédure. dans l'événement afterupdate, tu iras replacer le numéro réel créé dans la table paramètres.
Peux tu me préciser lol j'ai pas trop bien capté ce que tu m'as dis. Si ce que tu dis fonctionne, cela fera-t-il ce que je souhaite faire ?