OVH Cloud OVH Cloud

Problème de numéroauto

5 réponses
Avatar
Mario Limoges
Bonjour à tous,
Acc97

La question a sûrement déjà été traitée, mais je ne trouve pas .

J'ai une table "Membres" avec comme clef primaire un champs "No" de type
numéroauto, a cette table est lié un formulaire a partir duquel on peut
entrer un nouveau membre. Mon problème vas comme suit.
Lorsque l'utilisateur active ce formulaire et que sans entrer de données, il
clique sur le bouton Annuler qui active
"Me.Undo
"DoCmd.Close
le formulaire se ferme bien mais le numéroauto a été incrémenté de 1 et c
est ce que je voudrais empêcher

auriez-vous une idée

Merci à l'avance

5 réponses

Avatar
Mario Limoges
Et bien, merci 3stone, c'est donc dire que j'ai mis beaucoups d'énergies et
de temps a me battre contre le vent :-((

Je vais évaluer la fonction de domaine "DMax" comme suggéré .... a
l'attaque! ;-)

"3stone" a écrit dans le message de
news:3f900614$0$281$
Salut,

|| Lorsque l'utilisateur active ce formulaire et que sans entrer de
données, il

| clique sur le bouton Annuler qui active
| "Me.Undo
| "DoCmd.Close
| le formulaire se ferme bien mais le numéroauto a été incrémenté de 1 et
c

| est ce que je voudrais empêcher


Tu ne peut pas l'empêcher, c'est voulu.

Un numéroauto en clé primaire, n'est là que pour garantir l'unicité des
enregistrements.

Et, dans ce cas, il ne devrait même pas être "vu" par l'utilisateur.

S'il te faut absolument une numérotation continue, utilise plutôt la
fonction de domaine "DMax"


Voir l'aide à ce sujet.


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------





Avatar
3stone
Salut,

|| Lorsque l'utilisateur active ce formulaire et que sans entrer de données, il
| clique sur le bouton Annuler qui active
| "Me.Undo
| "DoCmd.Close
| le formulaire se ferme bien mais le numéroauto a été incrémenté de 1 et c
| est ce que je voudrais empêcher


Tu ne peut pas l'empêcher, c'est voulu.

Un numéroauto en clé primaire, n'est là que pour garantir l'unicité des enregistrements.
Et, dans ce cas, il ne devrait même pas être "vu" par l'utilisateur.

S'il te faut absolument une numérotation continue, utilise plutôt la fonction de domaine "DMax"

Voir l'aide à ce sujet.


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
Avatar
Jeff
Bonjour

Voici une fonction qui pourrait te mettre sur la piste...

Function NumeroRecu ()

Dim db As DAO.Database, mj As DAO.Recordset

Set db = CurrentDB()
Set mj = db.OpenRecordset("SELECT * FROM [Table] ORDER BY [Numero]")
If mj.RecordCount > 0 Then
mj.MoveLast
NumeroRecu = mj![Numero] + 1
Else
NumeroRecu = 1
End If
mj.Close
db.Close

End Function

<--- Une autre version --->

Function NumeroRecu ()

Dim db As DAO.Database, mj As DAO.Recordset

Set db = CurrentDB()
Set mj = db.OpenRecordset("SELECT * FROM [Table] ORDER BY [Numero]
DESC")
If mj.RecordCount > 0 Then
mj.MoveFirst
NumeroRecu = mj![Numero] + 1
Else
NumeroRecu = 1
End If
mj.Close
db.Close

End Function

--
Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/

"Mario Limoges" a écrit dans le message de
news:
Bonjour à tous,
Acc97

La question a sûrement déjà été traitée, mais je ne trouve pas .

J'ai une table "Membres" avec comme clef primaire un champs "No" de type
numéroauto, a cette table est lié un formulaire a partir duquel on peut
entrer un nouveau membre. Mon problème vas comme suit.
Lorsque l'utilisateur active ce formulaire et que sans entrer de données,
il

clique sur le bouton Annuler qui active
"Me.Undo
"DoCmd.Close
le formulaire se ferme bien mais le numéroauto a été incrémenté de 1 et c
est ce que je voudrais empêcher

auriez-vous une idée

Merci à l'avance




Avatar
3stone
Salut Jeff,

"Jeff" a écrit dans

| Set mj = db.OpenRecordset("SELECT * FROM [Table] ORDER BY [Numero]")


Même si cela fonctionne, il n'est pas utile de "ramener" toute la table
alors qu'il n'y a que le [Numero] qui nous intéresse...

Et donc faire un : "Select [Numero] From ...."
de plus, il est déjà indexé, vu qu'il est clé primaire.

Mais, pour le cas présent, autant utiliser un "DMax" qui ne demande à aucune déclaration.


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
Avatar
Jeff
Bonjour

Effectivement "SELECT [Numero] FROM ..." suffit

Merci pour la remarque

--
Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/
"3stone" a écrit dans le message de
news:3f9012a1$0$262$
Salut Jeff,

"Jeff" a écrit dans

| Set mj = db.OpenRecordset("SELECT * FROM [Table] ORDER BY [Numero]")


Même si cela fonctionne, il n'est pas utile de "ramener" toute la
table

alors qu'il n'y a que le [Numero] qui nous intéresse...

Et donc faire un : "Select [Numero] From ...."
de plus, il est déjà indexé, vu qu'il est clé primaire.

Mais, pour le cas présent, autant utiliser un "DMax" qui ne demande à
aucune déclaration.



--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------