Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

bonne incrémentation mais douteuse

7 réponses
Avatar
pascal913
Bonjour tout le monde !

Je suis sous Access 97 et dans mon formulaire, j'ai un champ qui permet
d'incr=E9menter un num=E9ro automatiquement =E0 chaque nouvel
enregistrement.Voici le code qui fonctionne parfaitement mais qui
bloque des fois, c'est a dire qu'il n'incr=E9mente plus, soit il remet
le meme num=E9ro que celui d'avant soit il met rien, pourquoi ?


Code :
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs =3D CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot)
If rs.EOF Then
Me!NoFA =3D 1
Else
rs.MoveLast
Me!NoFA =3D rs!NoFA + 1
End If
rs.Close
Set rs =3D Nothing
End Sub

J'ai essay=E9 d'=E9crire le num=E9ro qui aurait d=FB apparaitre pour qu'il
puisse recommencer normalement mais au bout de 2 ou 3 enregistrements
=E7a recommence. Alors je suis oblig=E9 d'effacer les enreistrements un
par un jusqu'=E0 ce que l'incr=E9mentation fonctionne normalement, et =E7a
je ne peux pas me le permettre. Si quelqu'un a une id=E9e voire une
solution, je lui serai tr=E8s reconnaissant !
Merci.

7 réponses

Avatar
Tisane
Bonjour Pascal,

Je suis sous Access 97 et dans mon formulaire, j'ai un champ qui
permet d'incrémenter un numéro automatiquement à chaque nouvel
enregistrement.Voici le code qui fonctionne parfaitement mais qui
bloque des fois, c'est a dire qu'il n'incrémente plus, soit il remet
le meme numéro que celui d'avant soit il met rien, pourquoi ?
Code :
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot)
If rs.EOF Then
Me!NoFA = 1
Else
rs.MoveLast
Me!NoFA = rs!NoFA + 1
End If
rs.Close
Set rs = Nothing
End Sub
J'ai essayé d'écrire le numéro qui aurait dû apparaitre pour qu'il
puisse recommencer normalement mais au bout de 2 ou 3 enregistrements
ça recommence. Alors je suis obligé d'effacer les enreistrements un
par un jusqu'à ce que l'incrémentation fonctionne normalement, et ça
je ne peux pas me le permettre. Si quelqu'un a une idée voire une
solution, je lui serai très reconnaissant !


Juste une idée en attendant que les programmeurs arrivent ;-))
Pour incrémenter un numéro, l'instruction serait plutôt du type
ME.NoFA = Dmax("NoFA","Ta_Table") + 1
qui elle, devrait marcher à tous les coups.

--
Tisane

Avatar
brainburnt
salut Pascal,

Ce que je ne comprend pas, c'est que tu as bien défini ton champs
comme étant un numéro automatique ou just eun champ de type
numérique??

Car normalement si c'est un Numéro Auto, Access fais l'incrémentation
tout seul comme un grand.

Exemple:
Un formulaire d'ajout de données avec un champs s'appelant
descriptionTempo

Une table TEMPO

2champs:
- numero : Numéro Auto
- description : Texte.


Lorsque tu vas faire un

strSQL = "INSERT INTO TEMPO(description) VALUES ('" &
descriptionTempo.Value & "')"
DoCmd.RunSQL (strSQL)

Il va faire tout seul l'incrémentation.

Si j'ai répondu a côté de la plaque, j'en suis désolé ^^

brainburnt
Avatar
Tisane
Rebonjour brainburnt,

Ce que je ne comprend pas, c'est que tu as bien défini ton champs
comme étant un numéro automatique ou just eun champ de type
numérique??
Car normalement si c'est un Numéro Auto, Access fais l'incrémentation
tout seul comme un grand.
[...]

Si j'ai répondu a côté de la plaque, j'en suis désolé ^^


Non tu n'as pas répondu à côté de la plaque, mais il est fréquent que l'on
veuille incrémenter un numéro sans passer par la numérotation automatique.
Exemple : la numérotation de factures.
Si on utilise le numéro auto, on aura obligatoirement des trous. Il suffit
qu'on commence une facture, puis qu'on s'échappe et c'est fichu pour le
numéro séquentiel.
Or, on ne peut/doit pas avoir de trous dans un facturier. Il y a d'autres
exemples bien sûr comme des n° de références, etc.
Donc, il utilise vraisemblablement un champ numérique auquel il faut qu'il
ajoute +1 sur le numéro le plus élevé.

Mais si Pascal revient, il nous en dira peut-être plus ;-)

--
Tisane

Avatar
brainburnt
Alors je suis d'accord avec toi pour ce qui est du code

Pour incrémenter un numéro, l'instruction serait plutôt du type
ME.NoFA = Dmax("NoFA","Ta_Table") + 1
qui elle, devrait marcher à tous les coups.


Mais attendons notre ami pour savoir ce qui l'en est réellement ^^

Avatar
pascal913
bonjour a tous et merci de m'avoir répondu, je suis désolé de ne
vous répondre que maintenant....

tisane a raison concernant le type de champ que j'ai utilisé.

j'essaye de suite le code que tu m'as suggéré et je te reponds.
Avatar
pascal913
pascal913 wrote:
bonjour a tous et merci de m'avoir répondu, je suis désolé de ne
vous répondre que maintenant....

tisane a raison concernant le type de champ que j'ai utilisé.

j'essaye de suite le code que tu m'as suggéré et je te reponds.


mais que faut il faire ? remplacer ton code par une de mes ligne ? ou
garder que ta ligne ? je n'utilise access que depuis poins de deux mois
et mes connaissances en programmation sont très limitée, alors, si tu
pouvais m'expliquer stp.......

merci

Avatar
Tisane
Rebonjour pascal,

bonjour a tous et merci de m'avoir répondu, je suis désolé de ne
vous répondre que maintenant....
tisane a raison concernant le type de champ que j'ai utilisé.
mais que faut il faire ? remplacer ton code par une de mes ligne ? ou

garder que ta ligne ? je n'utilise access que depuis poins de deux
mois et mes connaissances en programmation sont très limitée, alors,
si tu pouvais m'expliquer stp.......


Essaie uniquement avec ma ligne :
Private Sub Form_BeforeInsert(Cancel As Integer)
Me.NoFA = Dmax("NoFA","Ta_Table") + 1
End Sub

Sans doute perfectible ;-)
--
Tisane