Access - cle primaire qui evolué avec l'année
Mtygolu
Messages postés
338
Statut
Membre
-
LatelyGeek Messages postés 1774 Date d'inscription Statut Membre Dernière intervention -
LatelyGeek Messages postés 1774 Date d'inscription Statut Membre Dernière intervention -
salut,
j'ai fait une base de donnée pour des stock de pièce qui marche
quand je saisie mes n° de commande (clé primaire), je les rentre manuellement
donc maintenant je voudrais
1 - que les n° de commande s'incrémentent automatiquement
2 - si possible que le début du n° de commande corresponde a l'année en cours
exemple : 08001 - 08002 et ensuite 09001 - 09002 quand on sera en 2009
si vous avez une idée , je suis preneur
Merci
j'ai fait une base de donnée pour des stock de pièce qui marche
quand je saisie mes n° de commande (clé primaire), je les rentre manuellement
donc maintenant je voudrais
1 - que les n° de commande s'incrémentent automatiquement
2 - si possible que le début du n° de commande corresponde a l'année en cours
exemple : 08001 - 08002 et ensuite 09001 - 09002 quand on sera en 2009
si vous avez une idée , je suis preneur
Merci
A voir également:
- Access - cle primaire qui evolué avec l'année
- Clé usb non détectée - Guide
- Clé windows 8 - Guide
- Clé usb - Accueil - Stockage
- Formater clé usb - Guide
- Clé bootable windows 10 - Guide
5 réponses
Tu devrais mettre dans la valeur par défaut
=VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N°Commande]";"[Commandes]")+1;(Format(Date();"aa")*1000)+1;MaxDom("[N°Commande]";"[Commandes]")+1)
En supposant que ta table s'appelle Commandes.
J'explique le principe
Format(Date();"aa")*1000)+1 va donner 8001 pendant toute l'année 2008, puis 9001 toute l'année 2009.
Je fais abstraction du 0 qui précède, si ton champ est numérique ça n'est qu'une question de format.
MaxDom("[N°Commande]";"[Commandes]")+1 va donner le prochain numéro de commande, soit mettons 08256 si la dernière était 08255.
08256 est supérieur à 08001, donc pendant toute l'année 2008, c'est le dernier plus 1 qui va être choisi.
le premier janvier 2009, il faudra trouver la plus grande valeur entre 9001 et 08756 par exemple.
Ca sera donc 9001 qui sera retenu.
Pour l'histoire des zéros devant, deux possibilités.
Soit tu fais un champ numérique et le format en sera "00000", soit c'est un champ de type texte, et il faudra
transformer un peu la formule:
=VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N°Commande])";"[Commandes]")+1;"0"&(Format(Date();"aa")*1000)+1;MaxDom("[N°Commande]";"[Commandes]")+1)
=VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N°Commande]";"[Commandes]")+1;(Format(Date();"aa")*1000)+1;MaxDom("[N°Commande]";"[Commandes]")+1)
En supposant que ta table s'appelle Commandes.
J'explique le principe
Format(Date();"aa")*1000)+1 va donner 8001 pendant toute l'année 2008, puis 9001 toute l'année 2009.
Je fais abstraction du 0 qui précède, si ton champ est numérique ça n'est qu'une question de format.
MaxDom("[N°Commande]";"[Commandes]")+1 va donner le prochain numéro de commande, soit mettons 08256 si la dernière était 08255.
08256 est supérieur à 08001, donc pendant toute l'année 2008, c'est le dernier plus 1 qui va être choisi.
le premier janvier 2009, il faudra trouver la plus grande valeur entre 9001 et 08756 par exemple.
Ca sera donc 9001 qui sera retenu.
Pour l'histoire des zéros devant, deux possibilités.
Soit tu fais un champ numérique et le format en sera "00000", soit c'est un champ de type texte, et il faudra
transformer un peu la formule:
=VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N°Commande])";"[Commandes]")+1;"0"&(Format(Date();"aa")*1000)+1;MaxDom("[N°Commande]";"[Commandes]")+1)
Très bizarre... mais où as tu mis ça? Si tu l'as mis dans la table c'est PEUT-ETRE à cause de ça. Essaye dans le formulaire. Sinon je vois d'autant moins d'explication qu'il a reconnu la fonction puisqu'il l'appelle avec son nom anglais de DMax...
bon alors effectivement j'avais mis la fonction dans la table
donc je viens de la mettre dans le champ du formulaire
et du coup quand je veut créer un nouvel enregistrement j'ai un "#erreur" dans le champ du n° de commande qui apparait
cela vient peut etre du faite que pour le moment ma clé primaire n'est pas automatique , quand j'avais fait la table je voulais saisir le n° de commande a la main
donc je viens de la mettre dans le champ du formulaire
et du coup quand je veut créer un nouvel enregistrement j'ai un "#erreur" dans le champ du n° de commande qui apparait
cela vient peut etre du faite que pour le moment ma clé primaire n'est pas automatique , quand j'avais fait la table je voulais saisir le n° de commande a la main
bon alors je suis revenu en arrière
j'ai remis une numérotation auto a mes n° de commande
j'ai essayer les 2 fonctions que tu m'a donné dans le champs au niveau du formulaire , la fonction est acceptée (pas de message d'erreur) .
mais mes numéros de commande sont toujours 1 - 2 - 3 etc
a défaut je voudrais bien affiché 0001 a la place de 1
merci
j'ai remis une numérotation auto a mes n° de commande
j'ai essayer les 2 fonctions que tu m'a donné dans le champs au niveau du formulaire , la fonction est acceptée (pas de message d'erreur) .
mais mes numéros de commande sont toujours 1 - 2 - 3 etc
a défaut je voudrais bien affiché 0001 a la place de 1
merci
Evidemment! Le numéro automatique est justement automatique (1 - 2 - 3)
Tu dois mettre un champ de type numérique.
Et s'il existe dejà des enregistrements, attention: Ce que je t'ai dit ne fonctionnera que pour les prochains numéros. C'est une valeur par défaut pour les nouveaux enregistrements.
Si tu veux modifier les anciens, il faut faire une requête mise à jour.
Tu dois mettre un champ de type numérique.
Et s'il existe dejà des enregistrements, attention: Ce que je t'ai dit ne fonctionnera que pour les prochains numéros. C'est une valeur par défaut pour les nouveaux enregistrements.
Si tu veux modifier les anciens, il faut faire une requête mise à jour.
Non, je ne vois pas le rapport avec les liaisons. Je pencherais plutôt pour des valeurs non numériques dans ta table Commandes.
Pour trouver la réponse, les tests que tu peux faire sont, dans une requête, faire un Max sur le champ NCommande, puis essayer d'ajouter 1 à ce max.
Tu verras quand ça coince. Au passage, donner moi la valeur du Max, ça me permettra de réfléchir aussi...
Pour trouver la réponse, les tests que tu peux faire sont, dans une requête, faire un Max sur le champ NCommande, puis essayer d'ajouter 1 à ce max.
Tu verras quand ça coince. Au passage, donner moi la valeur du Max, ça me permettra de réfléchir aussi...
bon alors j'ai vidé ma base , juste entre une reference d'aticle et un fournisseur pour pouvoir saisir ma commande
j'ai vérifié le champ de la table commande , il est bien au format numérique
j'ai entré la fonction correspondant au format numérique que tu m'a donné en adaptant avec le nom de la table (commande) et du champ (n° de commande)
=VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N° de Commande]";"[Commande]")+1;(Format(Date();"aa")*1000)+1;MaxDom("[N° de Commande]";"[Commande]")+1)
la fonction est acceptée mais j'ai toujours le "#erreur" qui apparait dans le champ "n° de commande" et je ne peux donc pas saisir une nouvelle commande car ma clé primaire est invalide
j'ai vérifié le champ de la table commande , il est bien au format numérique
j'ai entré la fonction correspondant au format numérique que tu m'a donné en adaptant avec le nom de la table (commande) et du champ (n° de commande)
=VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N° de Commande]";"[Commande]")+1;(Format(Date();"aa")*1000)+1;MaxDom("[N° de Commande]";"[Commande]")+1)
la fonction est acceptée mais j'ai toujours le "#erreur" qui apparait dans le champ "n° de commande" et je ne peux donc pas saisir une nouvelle commande car ma clé primaire est invalide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci pour la réponse rapide
donc comme ma table s'appelle "Commande" et mon champ "N° de commande"(type texte), j'ai reformulé en
=VraiFaux((Format(Date();"aa")*1000)+1>MaxDom("[N° de Commande])";"[Commande]")+1;"0" & (Format(Date();"aa")*1000)+1;MaxDom("[N° de Commande]";"[Commande]")+1)
mais quand je veux fermé et sauvegardé , j'ai un message d'erreur :
fonction 'Dmax' inconnue dans l'expression de validation ou dans la valeur par défaut de 'commande.N° de commande'
modif impossible pour le moment .... SNIIIF
--------------------
« Je suis capable du meilleur et du pire.
Mais, dans le pire, c’est moi le meilleur. »