Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Générer une clé primaire de texte
Une
clé primaire de base de données désigne un champ dans lequel les
enregistrements sont forcément différents et uniques. A ce titre, il n'est pas rare de le typer en
NuméroAuto. Dès lors,
Access se charge de générer automatiquement la
clé primaire auto-incrémentée et qui n'a jamais été utilisée. Mais dans certains contextes, cette
clé est un assemblage de caractères et de numéros. Dès lors, elle ne peut plus être
auto-incrémentée par
Access. Le défi consiste donc à pouvoir la générer à la volée pour les besoins d'un
formulaire de création par exemple. Et cette
astuce montre comment construire cette nouvelle clé automatiquement, absolument nécessaire pour l'insertion de nouveaux enregistrements.
Source et procédure
Des données dédiées nous attendent dans une petite
base de données qu'il convient de récupérer.
En consultant le volet de navigation sur la gauche de l'écran, vous notez que cette base de données est composée de deux
tables, d'une
requête ajout et d'un
formulaire.
- Dans ce volet, double cliquer sur le formulaire f_ajout pour l'exécuter,
Ce
formulaire propose de créer une nouvelle activité de sortie à insérer dans la
table t_act_new.
Pour cela, il s'agit de définir un département, une ville, une activité à l'aide des trois listes déroulantes mais aussi une désignation dans la zone Raison sociale. Sur la droite du
formulaire, vous constatez de même la présence d'une zone intitulée
Nouvelle clé. Elle est verrouillée. L'utilisateur ne peut y accéder. Cette
clé primaire est essentielle pour accepter la création du nouvel
enregistrement dans la
table. Comme nous l'expliquions, elle doit se générer automatiquement.
- Dans le volet de navigation, double cliquer sur la table t_act_new,
Nous l'affichons ainsi en
mode Feuille de données.
Nous y retrouvons bien les informations à préciser depuis le
formulaire et à insérer dans les champs respectifs. Mais comme vous pouvez le voir, la
clé primaire en première colonne est effectivement un assemblage de textes et de numéros.
Vous obtenez la confirmation, certes évidente, en affichant la table en
mode création. Ce
champ de la clé primaire est typé comme un
texte court. Nous confirmons donc que l'incrémentation naturelle n'est pas envisageable.
Nouvelle clé de texte incrémentée
Pour générer la
nouvelle clé unique rendant possible la création, nous pouvons exploiter la
fonction Access MaxDom. Celle-ci va retourner l'enregistrement le plus grand alphabétiquement, soit celui dont la
clé primaire est associée au numéro le plus élevé. Bien sûr et contrairement à l'exemple de la capture, pour respecter cette
progression alphabétique avec pérennité, il faut se baser sur des ordres de grandeur plus importants, comme
act-1000 par exemple. En effet textuellement, le nombre 11 est considéré comme plus petit que le nombre 2. Sur cette clé, nous devons isoler le numéro en supprimant le préfixe
act-. Ainsi, nous pourrons l'incrémenter. Et sur ce nouveau numéro incrémenté, nous devrons adjoindre le préfixe supprimé, soit :
act-. L'insertion pourra alors avoir lieu puisque tous les renseignements nécessaires seront fournis.
En affichant la
requête d'ajout en mode création, vous constatez que toutes les correspondances sont prêtes. Mais à ce stade, la
zone de saisie clé du
formulaire ne génère pas encore la combinaison attendue. L'insertion est donc proscrite pour l'instant.
Dernière précision, avant l'exécution de la
requête Ajout par le
bouton du formulaire, une
action de macro actualise toutes les données. Cette actualisation aura pour effet de regénérer la clé au dernier indice, précisément avant l'insertion, dans le cadre d'une exploitation multi-utilisateur de l'application.
- Revenir sur le formulaire et cliquer sur la flèche du bouton Affichage dans le ruban Accueil,
- Dans la liste, choisir le mode création,
- Sur le formulaire en conception, cliquer sur la zone de texte grisée pour la sélectionner,
La
feuille de propriétés est nécessaire pour la suite des opérations. Elle est généralement placée sur la droite de l'écran. Si vous ne la voyez pas, vous devez cliquer sur le bouton du même nom dans le
ruban contextuel Création.
- Activer l'onglet Données de cette feuille de propriétés,
- Puis, cliquer dans la zone de sa propriété Source contrôle pour l'activer,
- Taper le symbole égal (=) pour initier la syntaxe de la source de données,
- Inscrire la fonction donnant la valeur maximale, suivie d'une parenthèse, soit : MaxDom(,
- Inscrire le nom du champ à analyser entre guillemets et entre crochets, soit : "[s_id]",
- Taper un point-virgule (;) pour passer dans l'argument de la table concernée,
- Inscrire le nom de la table entre guillemets, soit : "t_act_new",
- Puis, fermer la parenthèse de la fonction MaxDom et valider la syntaxe par la touche Entrée,
Nous ignorons donc le dernier argument facultatif de cette fonction. Il concerne le critère. En effet, nous souhaitons récupérer la valeur la plus grande sans concession.
- Enregistrer (CTRL + S) et exécuter le formulaire (F5),
Comme vous pouvez le voir, nous récupérons bien la
dernière clé de la table. La syntaxe que nous avons construite est la suivante :
=MaxDom("[s_id]";"t_act_new"). Mais elle ne nous permet pas encore de construire la nouvelle clé. Son numéro doit être incrémenté. L'opération ne consiste pas simplement à ajouter une unité. En l'état, cette clé est encore un texte. L'idée consiste à ne conserver que le numéro pour l'incrémenter puis à lui associer de nouveau la chaîne de caractères en préfixe. Pour supprimer cette chaîne dans un premier temps, nous devons exploiter la
fonction Access Remplacer.
- Revenir dans la vue en conception du formulaire,
- Sélectionner de nouveau la zone grisée de la clé calculée,
- Dans la zone Source contrôle, cliquer après le symbole égal pour y placer le point d'insertion,
- Inscrire la fonction de substitution suivie d'une parenthèse, soit : Remplacer(,
Ainsi, nous passons d'ores et déjà la chaîne retournée par le calcul de la
fonction MaxDom en premier paramètre. En deuxième paramètre, nous devons lui indiquer quel est le texte à remplacer dans cette chaîne. En troisième paramètre, nous devons lui fournir le texte de remplacement, soit une chaîne vide.
- Cliquer à la fin de la syntaxe pour placer le point d'insertion après la fonction MaxDom,
- Taper un point-virgule (;) pour passer dans l'argument du texte à remplacer,
- Inscrire le préfixe à remplacer entre guillemets, soit : "act-",
- Taper un point-virgule (;) pour passer dans l'argument du texte de remplacement,
- Inscrire deux guillemets ("") pour supprimer ce préfixe,
- Fermer la parenthèse de la fonction Remplacer,
- Ajouter une unité à ce calcul, soit : +1,
- Valider la syntaxe par la touche Entrée et enregistrer les modifications,
- Enfin, exécuter le formulaire avec la touche F5 du clavier,
Comme vous le constatez, nous avons parfaitement réussi à isoler le numéro de la dernière clé que nous avons ensuite incrémenté. Il ne nous reste plus qu'à replacer la chaîne de caractères en préfixe pour que le
formulaire de création devienne opérationnel.
- Revenir sur le formulaire en conception,
- Sélectionner la zone grisée de la clé,
- Dans sa propriété Source contrôle, compléter la syntaxe comme suit :
="act-" & Remplacer(MaxDom("[s_id]"; "t_act_new"); "act-"; "") + 1
Nous replaçons le préfixe de la clé incrémentée par une simple concaténation.
- Valider la syntaxe et enregistrer les modifications,
- Exécuter le formulaire avec la touche F5 du clavier,
La nouvelle clé auto-générée apparaît parfaitement construite. Si vous renseignez toutes les informations demandées et que vous cliquez sur le
bouton Ajouter, un message s'affiche confirmant la création de l'enregistrement avec cette nouvelle clé. Le formulaire se vide et l'ancienne clé reste figée en l'absence d'un nouvel événement. Mais à la moindre action, comme par exemple au choix d'un département dans la première liste déroulante, la clé s'actualise aussitôt sur le prochain numéro. Et si vous consultez le dernier enregistrement de la
table t_act_new, vous confirmez la présence de l'activité ainsi construite parfaitement référencée avec sa
clé primaire textuelle.
Petite précision qui a son importance : les clés utilisées sont un exemple, vous l'aurez compris. Elles ne permettent pas de pérenniser le classement alphabétique. Pour une exploitation fiable de ce système, il faut choisir des ordres de grandeur plus conséquents, comme act-1000 pour la première clé ou encore act-10000 si de nombreuses créations sont à entreprendre.