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

concaténation de deux champs dans une table sans passer par une requête

3 réponses
Avatar
Rémi
Bonjour,
j'ai entre autre trois champs dans une table :

- la clé primaire "num" avec le format 000000 en incrémentation
séquentielle

- un champs "yyyymm" qui me fait ressortir la date sous la forme 2010.02.
dont voici le format par défaut =Année(Date()) & "." &
VraiFaux(NbCar(FormatNumber(Mois(Date());0;-1;0;0))=1;"0" &
FormatNumber(Mois(Date());0;-1;0;0);FormatNumber(Mois(Date());0;-1;0;0)) &
"."
- au fait, il y aurait pas moyen de faire plus simple, car cette variante ne
fonctionne pas = "" & Format(Date, "yyyy.mm") & "." ?

- et mon champs dossier dont je voudrais qu'il soit la concaténation de mes
deux premier champs sous la forme 2010.02.000000
de préférence j'aimerais que cette concaténation s'effectue dans la valeur
par défaut du champs (donc en dur dans la table) et aussi que mon numéro
séquentiel reste à 6 chiffre (important pour moi)

Merci d'avance de votre aide

3 réponses

Avatar
3stone
Salut,

Rémi wrote:
j'ai entre autre trois champs dans une table :

- la clé primaire "num" avec le format 000000 en incrémentation
séquentielle



Ce n'est pas la description d'un numéroauto...

- un champs "yyyymm" qui me fait ressortir la date sous la forme
2010.02. dont voici le format par défaut =Année(Date()) & "." &
VraiFaux(NbCar(FormatNumber(Mois(Date());0;-1;0;0))=1;"0" &
FormatNumber(Mois(Date());0;-1;0;0);FormatNumber(Mois(Date());0;-1;0;0))
& "."
- au fait, il y aurait pas moyen de faire plus simple, car cette
variante ne fonctionne pas = "" & Format(Date, "yyyy.mm") & "." ?




S'il faut une date, il faut choisir un champ date.
La construction décrite est particulièrement extravagante !


- et mon champs dossier dont je voudrais qu'il soit la concaténation
de mes deux premier champs sous la forme 2010.02.000000
de préférence j'aimerais que cette concaténation s'effectue dans la
valeur par défaut du champs (donc en dur dans la table) et aussi que
mon numéro séquentiel reste à 6 chiffre (important pour moi)



Première forme normale:
Un champ doit contenir une valeur atomique.

Crée 2 champs:
Un numéroauto - clé primaire
un champ date

A l'usage, tu crées ce que tu veux dans la requête !
Mais on se sauve pas la concaténation d'autre champs dans la table.

PS:
En utilisant une seule fois la fonction Format() on extrait d'une date
tout ce que l'on veut et sous toutes les formes et donc également
d'un champ date.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Rémi
Bonjour Pierre,
je te remercie de t'être penché sur mon cas mais celà ne m'avance pas quant
à ma requête
- concernant ma clé primaire tu me dis qu'une numérotation de type 000000
n'est pas un numéro auto, certes je ne polémiquerai pas sur le sujet,
toujours est il que j'ai besoin de ce type de numérotation.
- concernant le champs date, certes le code est très certainement
extravagant mais je n'ai que celui là à ma disposition (il fonctionne). Si
tu as mieux je suis preneur, car j'ai essayé d'aller dans ton sens et je ne
m'en sors pas. En passant le champs en type date, les réactions sont
surprenantes.
- par contre si je te suis, apparemment access ne peut pas créer une
concaténation en dur dans une table, dur pour moi
- éventuellement j'ai donc une autre astuce pour arriver à mes fins mais
toutefois il subsiste un problème. je crée donc une requête de mise à jour
pour obtenir ce que je veux mais celle ci recopie mon numéro auto sans les
zéros devant l'incrément
aurais tu une idée à ce sujet ?
merci d'avance



"3stone" a écrit dans le message de
news:
Salut,

Rémi wrote:
j'ai entre autre trois champs dans une table :

- la clé primaire "num" avec le format 000000 en incrémentation
séquentielle



Ce n'est pas la description d'un numéroauto...

- un champs "yyyymm" qui me fait ressortir la date sous la forme
2010.02. dont voici le format par défaut =Année(Date()) & "." &
VraiFaux(NbCar(FormatNumber(Mois(Date());0;-1;0;0))=1;"0" &
FormatNumber(Mois(Date());0;-1;0;0);FormatNumber(Mois(Date());0;-1;0;0))
& "."
- au fait, il y aurait pas moyen de faire plus simple, car cette
variante ne fonctionne pas = "" & Format(Date, "yyyy.mm") & "." ?




S'il faut une date, il faut choisir un champ date.
La construction décrite est particulièrement extravagante !


- et mon champs dossier dont je voudrais qu'il soit la concaténation
de mes deux premier champs sous la forme 2010.02.000000
de préférence j'aimerais que cette concaténation s'effectue dans la
valeur par défaut du champs (donc en dur dans la table) et aussi que
mon numéro séquentiel reste à 6 chiffre (important pour moi)



Première forme normale:
Un champ doit contenir une valeur atomique.

Crée 2 champs:
Un numéroauto - clé primaire
un champ date

A l'usage, tu crées ce que tu veux dans la requête !
Mais on se sauve pas la concaténation d'autre champs dans la table.

PS:
En utilisant une seule fois la fonction Format() on extrait d'une date
tout ce que l'on veut et sous toutes les formes et donc également
d'un champ date.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)






Avatar
3stone
Salut,

Rémi wrote:
- concernant ma clé primaire tu me dis qu'une numérotation de type
000000 n'est pas un numéro auto, certes je ne polémiquerai pas sur le
sujet, toujours est il que j'ai besoin de ce type de numérotation.



Un numéroauto est totalement géré par Access, sans manipulation
inutile, il faut en profiter.

- concernant le champs date, certes le code est très certainement
extravagant mais je n'ai que celui là à ma disposition (il
fonctionne). Si tu as mieux je suis preneur, car j'ai essayé d'aller
dans ton sens et je ne m'en sors pas. En passant le champs en type
date, les réactions sont surprenantes.



C'est la date dont tu as besoin, donc un champ date - sans discution possible.
Pour le formatage à l'affichage, regarde les possibilités innombrable
de la fonction Format()


- par contre si je te suis, apparemment access ne peut pas créer une
concaténation en dur dans une table, dur pour moi



Cela va à l'encontre du principe même de la BDR.
Bien sûr que l'on peut par des manipulations infectes arriver à cela,
mais ces usines à gaz sont inutiles.
Note, Access 2010 connait même ce genre de champ, ajouter
"à la demande de l'utilisateur" :-/


- éventuellement j'ai donc une autre astuce pour arriver à mes fins



Il ne s'agit pas d'astuces (qui datent du début de l'informatique)
mais de voir ce que Access apport et de l'utiliser au mieux.


mais toutefois il subsiste un problème. je crée donc une requête de
mise à jour pour obtenir ce que je veux mais celle ci recopie mon
numéro auto sans les zéros devant l'incrément
aurais tu une idée à ce sujet ?



Une valeur numérique ne possède PAS de zéro devant !!!
Si c'est le cas, cela s'appelle du texte.

J'ai dit que l'on ne *sauve* pas cela dans une table...
par contre, on peut *afficher* cela dans la forme souhaitée!

Dans la requête de sélection, un simple "Format(NumAuto;"00000000")
affichiche (et imprime) de zoli zéro ;-)

De cette manière, on peut également "formater" plusieurs champs,
même une date, mais il faut s'intéresser aux fonctions disponibles
et ne pas inventer 3 lignes pour remplacer un *simple* formatage.

Tu dis :
cette variante ne fonctionne pas
= "" & Format(Date, "yyyy.mm") & "." ?

et as-tu regardé l'aide en ligne ?
car dans un formatage, on ne peut utiliser que les caractères
prédéfinis et donc significatifs...
Pour tous les autres, il suffit de les échaper !

Format(Date, "yyyy.mm")

fonctionne donc parfaitement :-))

PS: Pour l'aide en ligne, il suffit de placer le curseur sur la fonction
et d'appuyer sur la touche magique [F1]

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)