Copyright © 2021-2022 Yves MARCOUX; dernière modification : 2022-11-21.
Yves MARCOUX - EBSI - Université de Montréal
Comme
documents
monographies
articles
Il y a plusieurs façons de rechercher de l’information dans Access. Fondamentalement, le principe est toujours le même : l’utilisateur formule une requête de recherche dans une boîte de saisie que l’on appelle boîte de recherche, puis il lance la recherche. Access exécute alors la requête, c’est-à-dire qu’il repère dans la BD les éléments qui satisfont aux critères de la requête, puis les présente à l’utilisateur. On appelle ces éléments qui satisfont aux critères les résultats de la recherche. L’utilisateur navigue alors dans les résultats de recherche jusqu’à ce qu’il trouve ce qu’il veut.
On peut dire que la première étape, qui consiste à formuler et à faire exécuter une requête, restreint la portée de la seconde étape, celle de naviguer dans les résultats de recherche. Si la requête est très précise et retourne un faible volume d’information, la navigation peut se faire « à la main », sans outil particulier, simplement par inspection visuelle ou en utilisant les mécanismes de déroulement habituels (scrolling). Si, à l’inverse, la requête retourne une grande quantité d’information, alors des mécanismes spécifiques d’aide à la navigation peuvent être très utiles.
Une chose importante dans Access (et cela est vrai dans tout SGBD relationnel) est que le résultat d’une requête de recherche est toujours lui-même une table. Contrairement aux tables permanentes de la BD, que l’on voit dans la section Tables du Volet de navigation, un résultat de requête est une table temporaire, qui disparaît une fois qu’on la ferme, vraisemblablement après l’avoir parcourue par navigation à la recherche de l’information recherchée. Même temporaire, il n’en demeure pas moins que tout résultat de recherche est une table.
Pour cette raison, les mécanismes qu’Access propose pour naviguer dans le résultat d’une requête sont aussi applicables directement aux tables permanentes de la BD. On peut donc imaginer une recherche d’information basée exclusivement sur la navigation dans une des tables de la BD, sans formulation préalable d’une requête de recherche.
Une table peut être consultée non seulement en mode Feuille de données, mais également en mode Formulaire (par le truchement d’un formulaire). Il est bon de savoir que les mécanismes de navigation d’Access peuvent être utilisés autant en mode Feuille de données qu’en mode Formulaire.
La plupart des outils de recherche d’information, que ce soit des outils de navigation ou de recherche par requête, sont insensibles à la casse des lettres et aux signes diacritiques. On veut dire par là que, lorsqu’un critère de recherche est basé sur la présence d’un terme (mot, expression ou chaîne quelconque) dans un passage textuel, l’outil recherchera aussi toutes les variantes qui se distinguent du terme recherché par la casse des lettres (majuscule vs minuscule) et/ou par la présence de signes diacritiques (accents, cédilles et autres « décorations ») sur les lettres.
Ce comportement est en général une excellente chose en recherche d’information, puisqu’il nous évite d’avoir à décliner nous-mêmes toutes les formes d’un terme susceptibles de nous intéresser.
Dans Access, tant les outils de navigation que la recherche par requête sont
insensibles à la casse des lettres, mais malheureusement pas aux signes
diacritiques. Ainsi, la recherche du terme château
recherchera
également CHÂTEAU
(et toutes les autres variantes
majuscules/minuscules), mais ne recherchera pas
chateau
sans l’accent circonflexe. Ce comportement n’est pas
paramétrable.
Heureusement, Access permet de développer des fonctions par programmation et il est donc possible de programmer une fonction pour contourner ce problème. Évidemment, les recherches seront plus complexes, puisqu’elles devront faire usage explicite de cette fonction (nous verrons comment plus loin). Mais au moins, il sera possible de faire des recherches insensibles à la casse et aux diacritiques lorsque nécessaire.
Un point positif dans cette situation : il n’est pas nécessaire de faire la programmation soi-même. Il existe plusieurs façons de copier-coller dans sa propre BD une fonction adéquate à partir de différentes sources. Dans le cadre du cours, vous pourrez le faire à partir d’une BD Access qui vous sera fournie. Les instructions seront données en temps et lieu. Comme cette fonction est disponible en licence Creative Commons, vous pourrez même l’utiliser dans des projets futurs si jamais l’occasion se présente.
Jetons d’abord un coup d’œil aux outils de navigation disponibles dans Access. Comme nous avons dit précédemment, ces mécanismes sont tout autant applicables pour la navigation dans une table permanente de la BD que pour la navigation dans un résultat de requête, et autant en mode Feuille de données qu’avec un formulaire en mode Formulaire.
Le tri consiste en le réarrangement des fiches d’une table selon un ordre donné, ce qui peut faciliter le repérage d’information pertinente; en d’autres termes, la navigation.
Nous avons effleuré la forme la plus simple du tri lors de notre première exploration d’Access. Il s’agit du tri selon le contenu d’un seul champ, soit en ordre croissant, soit en ordre décroissant. La façon que vous avions vue pour appliquer un tel tri ne fonctionne qu’en mode Feuille de données; voici une façon qui fonctionne également en mode Formulaire.
Si vous effectuez l’opération successivement sur deux champs, le dernier champ traité sera la clé principale de tri et l’autre la clé secondaire.
Il faut noter que, même si le tri est sensible aux diacritiques, il les traite correctement, de sorte que le résultat du tri n’est pas faussé.
Le second mécanisme d’aide à la navigation dans Access est analogue à la fonction « rechercher / remplacer » que l’on retrouve dans les logiciels de traitement de texte. Il permet de « sauter » à la prochaine occurrence d’une chaîne de caractères que l’on fournit.
Malheureusement, il n’est pas possible, avec ce mécanisme, de contourner la prise en compte des diacritiques en utilisant une fonction programmée. Cette aide à la navigation est donc toujours sensible aux diacritiques.
« Document actif » signifie ici simplement la totalité de table que l’on est en train de consulter. Il est possible de limiter la recherche au champ où on l’a commencée, en troquant « Document actif » pour « Champ actuel ».
On peut moduler le comportement de la recherche en ajustant les paramètres « Où » et « Sens », dont les valeurs sont auto-explicatives.
Note : Si on est en train de consulter une table en mode Formulaire avec un formulaire qui contient un ou plusieurs sous-formulaires, la chaîne n’est pas recherchée dans les champs du sous-formulaire, sauf si on a démarré la recherche dans un de ces champs. Dans ce cas, la chaîne n’est recherchée que dans les champs du sous-formulaire pour la fiche courante du formulaire principal.
Recherche rapide
Une fonctionnalité partielle de recherche est accessible par la petite boîte « Rechercher » de la barre de navigation habituellement présente complètement au bas de la feuille de données ou du formulaire, où l’on peut inscrire la chaîne recherchée :
Cette fonctionnalité partielle ne permet que d’atteindre la première occurrence de la chaîne recherchée et ne recherche jamais dans les sous-formulaires. Pour atteindre les occurrences suivantes, ou moduler le comportement de la recherche, il faut ouvrir la fenêtre de recherche en cliquant sur la loupe dans le bandeau Accueil.
Remplacement
La fenêtre de recherche comporte parfois un onglet Remplacer, qui se présente comme suit :
Son fonctionnement est tout à fait analogue au remplacement que l’on peut effectuer avec la fonction rechercher / remplacer des logiciels de traitement de texte.
L’onglet Remplacer n’est pas présent si on est en train de consulter un formulaire où les modifications sont interdites, ou avec certaines requêtes qui ne permettent pas les modifications.
Toutes les requêtes données en exemples dans cette section peuvent
être essayées avec cette BD (qui contient
déjà la fonction désac
; voir ci-après).
Rappelons que la formulation d’une requête de recherche est souvent le point de départ d’une démarche de recherche d’information. En réponse à la requête formulée par l’utilisateur, Access présente les résultats de recherche. Comme ces résultats sont toujours une table, l’utilisateur peut y naviguer en utilisant les mécanismes de navigation que nous venons de voir.
Tel qu’annoncé plus haut, il vous sera possible de formuler des requêtes
insensibles aux diacritiques, grâce à une fonction, appelée
désac
(diminutif de « désaccentuation »), qui vous est fournie. Pour
intégrer cette fonction dans votre BD, procédez comme suit.
Intégration de la fonction désac
dans votre BD :
outils-rech.accdb
, dans une seconde copie d’Access.outils-rech.accdb
, dans la section Modules du Volet de
navigation, faites clic-droit sur l’élément appelé codeGénéral
,
puis choisissez Copier.codeGénéral
.outils-rech.accdb
.
Vous devrez peut-être confirmer la suppression du contenu du presse-papier.Voilà, à partir de maintenant, vous pourrez utiliser la fonction
désac
dans vos requêtes de recherche (nous verrons comment
ci-dessous).
Notez que cette fonction élimine correctement les signes diacritiques du français et de la plupart des langues européennes, mais pas nécessairement ceux de toutes les langues.
Les requêtes de recherche en Access peuvent être rédigées dans différentes interfaces, dont la plupart sont des interfaces graphiques. Ultimement, pour être exécutées, toutes les requêtes sont traduites en un langage d’interrogation spécifique appelé SQL, pour Structured Query Language, le langage d’interrogation standard des SGBD relationnels.
Dans ce texte, nous ne verrons pas directement le langage SQL; nous nous limiterons à une des interfaces graphiques d’Access. Il s’agit d’une interface de filtrage, qui permet de définir et d’appliquer à une table, au moment où on la consulte, un critère de sélection qui « laisse passer » certaines lignes de la table et masque les autres. Nous mentionnerons aussi brièvement une autre interface de filtrage, plus simple, utile dans certains cas spécifiques.
Un filtre est un critère de sélection qui s’applique aux lignes d’un table que l’on est en train de consulter, que ce soit en mode Feuille de données ou en mode Formulaire. Il s’agit donc d’un type de requête qui retourne comme résultat un sous-ensemble des lignes de la table, avec exactement les mêmes champs que la table de départ.
La définition et l’application d’un filtre se déroulent comme suit :
L’interface de filtrage permet aussi de définir un ordre de tri à appliquer au résultat du filtre. Cependant, comme nous avons déjà couvert le tri précédemment, nous ne parlerons pas de cette possibilité ici.
De façon à pouvoir effectuer vous-même les exemples proposés, il
est suggéré d’ouvrir maintenant en mode Feuille de données la table
documents
.
Pour lancer l’interface de filtrage pendant la consultation d’une table, que ce soit en mode Feuille de données ou en mode Formulaire :
Un nouvel onglet s’ouvrira, dont le nom est celui de la table suivi du suffixe
Filtre1
. Par exemple, avec la table documents
, l’onglet
s’appelle documentsFiltre1
.
Le contenu de cet onglet a cette apparence :
Dans cette interface, la partie du haut sert seulement d’aide-mémoire pour la structure de la table consultée. Toute l’« action » se passe dans la partie du bas.
Nous allons illustrer le fonctionnement de cette interface avec des exemples.
Commençons par un filtre très simple : un qui nous permettra de faire afficher
seulement les monographies. Les monographies sont les documents dont le champ
TYPE
contient la valeur "M"
, ce qu’on pourrait exprimer
par l’expression TYPE="M"
.
Pour exprimer ce critère dans l’interface (la partie du bas de l’onglet, bien sûr),
on inscrit le nom du champ, TYPE
, et le critère, ="M"
,
dans une des colonnes à notre disposition (il est naturel d’utiliser la première
colonne, mais en fait, n’importe laquelle pourrait être utilisée) :
La définition du filtre est terminée. Pour l’appliquer, on retourne à la zone Trier et filtrer du bandeau, où on cliquera sur Options avancées puis sélectionnera Appliquer le filtre/tri :
Et voilà ! Seules les monographies sont maintenant affichées :
On peut désactiver le filtre en cliquant sur Activer/désactiver le filtre dans la zone Trier et filtrer du bandeau :
La forme que peut prendre un critère est la même que celle des expressions « Valide si », mentionnées dans un texte précédent. Une discussion complète des expressions « Valide si » peut être consultée ici. Le reste de cette section couvre les formes de critères les plus courantes pour la recherche documentaire.
Un critère commence habituellement par un opérateur de comparaison, suivi d’une
valeur. Dans notre exemple, l’opérateur de comparaison était = et la valeur
"M"
.
Cependant, l’opérateur peut être précédé du mot Pas
, ce qui a pour
effet d’inverser le critère de sélection. Par exemple, si on inscrit comme critère
Pas = "M"
, on obtiendra seulement les articles :
Également, l’opérateur = peut être omis; il est alors implicite. Ainsi, pour les
monographies, nous aurions pu écrire simplement "M"
plutôt que
="M"
comme critère, avec exactement le même résultat :
Il y a d’autres opérateurs de comparaison qui peuvent être utilisés dans un critère. Voici quelques-uns des plus importants :
Opérateur Signification = (peut être omis) Égal à < Plus petit que > Plus grand que <>
Différent de <= Plus petit ou égal à >= Plus grand ou égal à Comme
Ressemblant à
L’opérateur = est le seul qui peut être omis.
Nous reviendrons sur l’opérateur Comme
ci-dessous.
Les autres opérateurs mentionnés (<, >, <>
, <=, >=) peuvent
être utilisés avec des champs de type texte, mais ils sont plus typiquement utilisés
avec des champs numériques ou de type date. Nous allons en illustrer l’utilisation
avec le champ DACR
(date de création).
Déplacement du champ DACR
En tout temps, lorsqu’on consulte une table en mode Feuille de données, l’ordre des colonnes peut être modifié.
Ici, pour voir plus facilement le champ DACR
, nous allons le
déplacer entre TITP
et TOED
:
Cliquer d’abord sans relâcher sur l’entête du champ DACR
:
puis glisser-déposer la colonne entre TITP
et
TOED
:
Le champ DACR
se retrouve alors à l’endroit voulu :
Le filtre suivant repère les documents dont la fiche a été créée avant septembre 2021 :
Notez que, dès que vous déplacez le curseur en dehors de la case du critère, Access
modifie la valeur en #2021-09-01#
:
La forme AAAA-MM-JJ flanquée de deux #
est la forme prescrite pour les
dates dans les critères, mais Access nous permet de les inscrire sous d’autres
formes. Peu importe la forme sous laquelle on l’inscrit, la date correspond au 1
septembre 2021, et l’on obtient donc, à l’application du filtre, le résultat
suivant :
Notez que la date visible sur la dernière ligne ne fait pas partie du résultat de
recherche, mais est la valeur qui serait inscrite dans le champ DACR
si
on créait une nouvelle fiche en inscrivant des données sur la ligne identifiée par
(Nouv.) dans la colonne NO
.
Il faut faire attention avec les comparaisons de dates, parce qu’en Access, toutes les dates contiennent implicitement aussi une heure « cachée », de sorte que, par exemple, 2021-09-04 désigne en fait minuit le 4 septembre 2021. Ainsi, si on formule comme critère :
il est possible que l’on obtienne des documents dont la fiche a été créée le 24 août 2021, même si le critère semble les exclure. C’est que le critère désigne minuit au début de la journée du 24 août, alors que les fiches créées ce jour-là l’ont presque certainement été après minuit. En effet, on obtient le résultat suivant :
Similairement, le critère suivant :
ne repêche rien :
puisqu’aucune des fiches n’a été sauvegardée à exactement minuit le 24 août 2021.
En conclusion, on peut dire que les opérateurs < et
>=
sont les deux seuls opérateurs qui fonctionnent de façon intuitive
avec les dates.
Si vous ne voulez pas que le déplacement du champ DACR
soit permanent, vous n’avez qu’à fermer maintenant la table documents
sans sauvegarder sa mise en forme.
Comme
Nous avons déjà rencontré brièvement l’opérateur Comme
en lien avec l’expression
« Valide si » du champ DATP
. Cet opérateur permet une comparaison
« souple » entre une chaîne de caractères et un patron pouvant contenir des
caractères génériques ou « jokers ». Par exemple, nous avons vu que le
caractère # représente n’importe quel chiffre. Rappelons que la totalité des
caractères génériques est décrite ici.
Un caractère générique qui nous sera extrêmement utile pour la recherche textuelle
est l’astérisque *
. Ce caractère générique représente un nombre
arbitraire de caractères quelconques, y compris la chaîne vide. Ainsi, utilisé au
début et à la fin d’un terme de recherche, il permet de repérer un mot ou une chaîne
quelconque n’importe où dans le contenu d’un champ.
Par exemple, le critère suivant retrouvera les documents avec le mot « métier » leur titre :
Notez que si on omet l’accent aigu, le filtre ne retourne rien :
Si l’on veut pouvoir formuler le critère sans égard aux diacritiques, il
faut utiliser la fonction désac
. Pour ce faire, au lieu de spécifier
TITR comme Champ, nous allons inscrire désac(TITR). Pour y arriver, il faut non seulement choisir
dans la liste déroulante des champs, mais il faut vraiment cliquer dans la case
Champ et taper au clavier « désac(TITR)
» :
Notez que, dès que l’on déplace le curseur hors de la case, Access remplace le contenu par Expr1: désac([TITR]), ce qui ne change rien à la signification du critère :
Et, alors, lorsqu’on applique le filtre, on obtient le résultat voulu :
Notez que le caractère générique *
peut aussi être utilisé au
milieu du terme de recherche :
Rappelons que, comme ce dernier exemple l’illustre bien, l’opérateur
Comme
ne distingue pas majuscules et minuscules.
Il est possible de combiner plusieurs critères au sein d’un même filtre. Les critères peuvent être combinés avec un OU booléen ou avec un ET booléen. Comme d’habitude, avec un OU booléen, les fiches repêchées sont celles qui satisfont l’un ou l’autre (ou les deux) des critères. Avec un ET, ce sont les fiches satisfaisant les deux critères qui sont repêchées.
Lorsqu’on combine plusieurs critères, chacun est inscrit sur sa propre colonne. Les critères eux-mêmes seront inscrits soit sur la ligne Critères, comme nous avons fait jusqu’ici, mais certains peuvent aussi être inscrits sur la ligne Ou, ou même sur une des lignes non étiquetées situées en-dessous de la ligne Ou.
Pour combiner des critères avec un ET booléen, on les inscrit sur la même ligne. Commençons avec une combinaison de deux critères. Supposons que l’on veuille repérer les monographies avec « métier » dans leur titre :
Un seul document répond aux deux critères à la fois :
Si nous avions inscrit le critère "M"
sur la ligne Ou, au lieu de la
ligne Critères :
les critères auraient été combinés avec un OU booléen, et toutes les monographies, en plus des articles avec « métier » dans leur titre, auraient été repérées :
Retirons maintenant le critère sur le TYPE puis servons-nous du OU booléen pour repérer les documents avec « métier » soit dans leur titre, soit dans le titre du périodique (TITP).
Pour retirer un critère, il suffit de sélectionner la colonne correspondante, en cliquant au-dessus du nom du champ :
puis d’appuyer sur la touche Suppr. (Del).
On peut alors ajouter le critère qui touche le champ TITP :
Si on avait mis les deux Comme "*metier*"
sur la même ligne, c’est
alors un ET booléen qui aurait été appliqué aux deux critères :
Si l’on veut lier par un OU deux critères qui touchent le même champ, on peut, si l’on veut, inscrire les deux critères sur deux lignes différentes de la même colonne, plutôt que d’utiliser deux colonnes différentes :
Notez que si vous quittez l’interface de filtrage puis y revenez, Access aura restructuré la grille de critères comme suit :
Il est important de noter que les ET booléens, correspondant aux critères sur la même ligne, sont effectués avant les OU entre les lignes. Ainsi, par exemple, revenons au OU booléen pour repérer les documents avec « métier » soit dans leur tire, soit dans le titre du périodique (TITP) :
et supposons maintenant qu’on veut n’obtenir que les documents d’avant 2020. On
veut donc ajouter un ET booléen avec le critère DATP < "2020"
(rappelez-vous que le champ DATP est un champ texte). Comme les ET booléens sont
effectués en premier, il faudra dupliquer le critère DATP < "2020"
pour qu’il s’applique à chacune des lignes :
Simplifiez le critère dans le filtre suivant :
Réponse : < 10
Jusqu’ici, nous n’avons formulé que des critères touchant les champs de la table
principale d’INFORM-R : la table documents
.
Nous allons maintenant voir comment formuler des critères qui touchent les champs
« à occurrences multiples » : les champs AUTR et DESC; par exemple, faire une
recherche de documents à partir d’un descripteur ou d’un nom d’auteur.
Même si la chose peut être surprenante, nous allons continuer à travailler sur une
seule table, avec la même interface de filtrage. La différence, c’est que la table
sur laquelle nous allons appliquer les filtres ne sera pas la table
documents
elle-même, mais plutôt le résultat d’une autre
requête. Cette requête sera une jointure, au sein de laquelle seront réunies
les informations de la table documents
et de la ou des tables
correspondant au(x) champ(s) que nous voulons interroger. Ces tables sont
AUTRocc
et DESCocc
.
Pour pouvoir formuler des critères sur les auteurs – ou combiner des critères sur
les auteurs avec des critères sur les autres champs de documents
– il
faut créer une jointure qui fait le lien entre les documents et les auteurs.
Pour ce faire :
documents
et AUTRocc
. Access
marquera par une ligne la clé
externe qui lie les tables.docs-AUTR
, qui apparaîtra alors
dans la section Requêtes du Volet de navigation.Ouvrez maintenant la requête en mode Feuille de données :
Vous remarquerez que certaines informations concernant les documents sont
répétées : c’est que la jointure réplique les champs de la table
documents
pour chacun des auteurs du document. Ainsi, comme le
document 1 a deux auteurs, ses informations apparaissent 2 fois, mais avec chaque
fois un nom d’auteur différent (champ AUTR, la dernière colonne).
De façon à visualiser plus facilement le champ AUTR dans les exemples de cette section, déplacez-le entre TITP et TOED, comme vous avez fait précédemment pour DACR.
Une fois le déplacement effectué, vous obtiendrez l’affichage suivant :
où il est plus facile de vérifier que les deux lignes portant le NO 1 ont chacune un nom d’auteur (AUTR) distinct.
Pendant que la requête docs-AUTR
est ouverte en mode Feuille de
données, on peut appliquer des critères de filtrage sur tous les champs de la
jointure, c’est-à-dire tous les champs provenant de documents
et le
champ AUTR
.
Voici un exemple :
Évidemment, on pourrait combiner un critère sur le champ AUTR avec des critères sur
d’autres champs avec des opérateurs booléens, comme nous avons fait précédemment sur
la table documents
. Faites vos propres expérimentations.
Pour les champs qui, comme AUTR, sont soumis à une liste d’autorité modifiable, une autre interface de filtrage, déjà évoquée dans un texte précédent, peut s’avérer utile.
On ouvre cette interface en cliquant sur le petit triangle à droite du nom de champ :
Une fois ouverte, cette interface permet de sélectionner les valeurs qui nous intéressent (ici, des noms d’auteur) par simple boîte-à-cocher :
Par exemple, si on ne coche que Rose Châteauvert, on n’obtiendra que les documents dont cette personne est auteure :
La préparation de la jointure permettant de formuler des recherches impliquant les descripteurs est tout à fait analogue à celle pour les auteurs.
Refaites donc les mêmes étapes, en ajoutant cette fois-ci la table
DESCocc
(au lieu de AUTRocc
) et en sauvegardant la
requête sous le nom docs-DESC
. Expérimentez ensuite avec la formulation
de recherches (filtres) impliquant les descripteurs.
Si on veut combiner au sein d’un même filtre des critères portant sur les auteurs
et sur les descripteurs, il faudra une jointure des trois tables
documents
, AUTRocc
et DESCocc
. Encore là,
la création de cette requête est tout à fait analogue à celle pour les auteurs et
pour les descripteurs séparément.
Refaites donc les mêmes étapes, en ajoutant cette fois-ci les tables
AUTRocc
et
DESCocc
. La jointure aura l’allure suivante :
Sauvegardez-la sous le nom docs-AUTR-DESC
.
Expérimentez ensuite avec la formulation de recherches (filtres) combinant au moins un critère sur les auteurs et un critère sur les descripteurs.
Supposons que l’on recherche les documents ayant comme descripteurs "clergé"
et "environnement". En première analyse, on serait tenté de
formuler le filtre suivant sur la jointure docs-DESC
:
Or, comme vous pouvez le constater en appliquant vous-même ce filtre, le résultat
obtenu est vide. Pour comprendre ce qui se passe, commençons par regarder le
résultat de la jointure docs-DESC
exécutée sans aucun filtre (pour
faciliter la lecture, nous avons déplacé le champ DESC juste après TITR) :
Il n’y a qu’un seul champ DESC et chaque ligne du résultat ne présente donc qu’une seule occurrence de descripteur. Le filtre tel que nous l’avons formulé plus haut revient donc à demander de retenir les lignes où le même descripteur est à la fois égal à "clergé" et à "environnement", ce qui est évidemment impossible (rappelez-vous que le filtre est appliqué à chaque ligne une par une et indépendamment des autres lignes). D’où le fait qu’aucune ligne n’est retenue et que le résultat du filtre est vide.
Il existe plusieurs façons d’obtenir le résultat voulu avec le modèle relationnel.
Une des plus faciles est d’utiliser une forme un peu plus complexe de jointure, qui
combinera la table documents
avec deux copies de la
table DESCocc
.
Commençons d’abord comme vous avez fait tout à l’heure pour
docs-DESC
:
Incluons maintenant la seconde copie de DESCocc
, en ajoutant
simplement de nouveau la table; la copie sera automatiquement nommée
DESCocc_1
:
Comme d’habitude, vous pouvez déplacer cette seconde copie où vous voulez dans le diagramme; par exemple :
Maintenant, de façon similaire à ce que vous avez fait à l’étape 3 de la création
de la clé externe de AUTRocc
vers documents
,
glissez-déposez le champ noDoc de DESCocc_1
sur le champ NO de
documents
. Access répondra en traçant une ligne entre les deux
champs :
Enfin, configurez la partie du bas tel qu’indiqué :
Si ce n’est pas déjà fait, sauvegardez maintenant la requête sous le nom
docs-DESC-DESC
.
Notez que si vous fermez la requête (après sauvegarde) et la rouvrez ensuite à nouveau en mode création, vous remarquerez que les cardinalités (1 et ∞) auront disparu du diagramme. Cela n’affecte cependant en rien le fonctionnement de la requête.
Maintenant, comme nous l’avons fait pour docs-DESC
, regardons ce que
donne la requête docs-DESC-DESC
exécutée sans filtre (encore
ici, les champs descripteurs ont été déplacés pour faciliter la lecture) :
Ce qui frappe tout de suite est le grand nombre de lignes. En fait, cette jointure affiche toutes les combinaisons de deux descripteurs d’un même document, chacune combinaison sur une ligne. Regardons par exemple la section qui concerne le document 3 :
Neuf lignes du résultat concernent le document 3, parce que ce document est en lien avec (ou « possède ») trois occurrences de descripteur, ce qui représente neuf façons de les combiner deux à deux (trois possibilités pour le premier × trois possibilités pour le second).
Ce qu’il faut retenir, c’est que cette requête nous permet maintenant de formuler
des critères impliquant deux descripteurs distincts d’un même document.
Ainsi, par exemple, les documents ayant à la fois le descripteur "clergé"
et le descripteur "environnement" peuvent maintenant être repérés
avec le filtre suivant, appliqué à docs-DESC-DESC
(ouverte en mode
Feuille de données) :
qui donne comme résultat :
Le même principe peut être utilisé pour effectuer le même genre de recherche avec
les auteurs, en passant cette fois-ci par une jointure de documents
avec deux copies de AUTRocc
, jointure que l’on nommera
docs-AUTR-AUTR
, pour poursuivre la nomenclature utilisée
jusqu’ici.
Que la table sur laquelle on applique un filtre soit une table permanente de la BD ou le résultat d’une jointure, il est possible de sauvegarder la définition du filtre en tant que requête enregistrée dans la BD.
À partir de l’interface de définition du filtre, on retourne à la zone Trier et filtrer du bandeau, où on cliquera sur Options avancées puis sélectionnera Enregistrer en tant que requête :
Access demandera le nom à donner à la requête, laquelle apparaîtra ensuite dans la section Requêtes du Volet de navigation.
La définition de la requête ainsi sauvegardée inclut la table sur laquelle le filtre a été défini et le filtre lui-même. Lorsqu’on exécute la requête sauvegardée (double-clic dessus ou encore clic-droit puis Ouvrir), le résultat est déjà filtré.
Bien qu’il puisse être utile de sauvegarder comme requêtes des filtres avec un ou des termes de recherche fixes (par exemple, tous les documents avec "metier" dans leur titre), la véritable utilité des filtres sauvegardés se révèle avec les filtres à paramètres.
Un filtre à paramètre(s) est un filtre dans lequel un ou plusieurs termes de recherche ne sont pas encore spécifiés. Cela permet, par exemple, de définir un filtre qui recherche dans les titres, sans préciser tout de suite la chaîne à rechercher. Ce n’est qu’au moment de l’application du filtre qu’Access demandera à l’utilisateur la chaîne spécifique à rechercher.
La première chose à faire pour créer un filtre à paramètre(s) est de déterminer le libellé exact de la ou des questions qui devront être posées à l’utilisateur pour spécifier entièrement le filtre à appliquer. Par exemple, pour poursuivre avec l’exemple de la recherche dans les titres, la question pourrait être :
Chaîne à chercher dans les titres ?
On obtient le nom du paramètre correspondant en ajoutant des crochets
[ ]
de part et d’autre de la question :
[Chaîne à chercher dans les titres ?]
On va ensuite rédiger le critère en remplaçant un terme de recherche spécifique par
le nom du paramètre, par exemple, si on travaille sur la table
documents
:
Au moment où on applique le filtre, Access nous demande :
et c’est notre réponse à cette question qui sera utilisée comme terme de recherche. Ainsi, par exemple, si on répond :
résultat obtenu sera comme si le critère était Comme "*metier*"
:
Notez qu’il ne faut pas inscrire les guillemets dans la réponse à la question.
Si nous sauvegardons ce filtre à paramètre en tant que requête, nommée par exemple
rech-TITR
, la requête sauvegardée sera une requête à
paramètre et à chaque fois qu’on l’exécutera, Access reposera la question
correspondant au paramètre, ce qui permettra de rechercher une chaîne différente à
chaque fois.
Truc du métier
Les requêtes à paramètre(s) sont une excellente façon de préparer des requêtes de recherche à l’intention des utilisateurs de la BD qui ne connaissent pas Access. Les utilisateurs n’ont qu’à répondre à une ou quelques questions pour obtenir l’information voulue.
Les requêtes à paramètre(s) sont parfois appelées requêtes grand public.
Avant d’aller plus loin, notons tout de suite que notre dernier exemple pourrait être amélioré de deux façons :
Pour le point 1, le critère peut accoler l’astérisque "*" à gauche et à droite du
paramètre avec l’opérateur de concaténation
&
.
Pour le point 2, il suffit d’appliquer la fonction désac
non seulement
au champ interrogé, mais aussi à la chaîne fournie par l’utilisateur.
Au final, le critère « amélioré » se lira comme suit :
Ainsi, l’utilisateur n’a pas à inscrire lui-même les "*" au début et à la fin de la chaîne recherchée et s’il inscrit par distraction des caractères accentués dans sa réponse, les accents seront ignorés. Par exemple, la réponse :
donnera bel et bien le résultat escompté :
Voici un exemple à deux paramètres, que l’on pourrait sauvegarder dans une requête
appelée intervalle-DATP
:
L’opérateur Entre … Et …
vérifie si une valeur est située entre une
valeur minimum et une valeur maximum.
Comme il y a deux paramètres, Access posera deux questions au moment de l’exécution de la requête. Voici un enchaînement possible :
Supposons maintenant que notre BD INFORM-R a été alimentée suffisamment pour permettre des recherches intéressantes. Quels sont les différents scénarios, ou contextes, d’utilisation possibles de la BD en recherche ?
On peut distinguer deux scénarios différents, selon le type de personne désirant effectuer la recherche :
documents
, soit une des jointures permettant la recherche dans les champs à occurrences
multiples.Dans les deux cas, à partir de ce point de départ, et en fonction de son habilité avec Access, la personne peut, si nécessaire, naviguer dans les données et/ou les filtrer pour satisfaire son besoin d’information.
Quel que soit le scénario, le point de départ est toujours une table :
soit la table permanente documents
, soit le résultat d’une jointure
(aussi une table), soit le résultat d’une requête à paramètres (aussi une
table).
Rappelez-vous que les outils de navigation et le filtrage fonctionnent non seulement en mode Feuille de données, mais également en mode Formulaire. Donc, la démarche de recherche pourrait être démarrée en mode Formulaire aussi bien qu’en mode Feuille de données, pour peu qu’on dispose d’un formulaire pour la table servant de point de départ.
C’est exactement ce que nous allons faire ici : pour chaque table pouvant être le point de départ d’une recherche, nous allons créer un formulaire qui permettra d’intégrer avec fluidité la recherche et la consultation des documents, et même leur modification. Une fois ces formulaires créés, il seront avantageusement utilisés comme points de départ pour des recherches, plutôt que les tables correspondantes en mode Feuille de données.
Comme étape préalable à la création des formulaires, nous devons ajouter deux macros à notre BD (une macro est une espèce de programme écrit dans un langage de programmation spécialisé de très haut niveau). Ces macros ne sont pas complexes, mais comme la conception de macros dépasse la portée du cours, elles vous sont fournies déjà faites. Si vous souhaitez les analyser par vous-même pour en comprendre la structure, vous en aurez l’occasion en suivant les instructions données ci-après.
Intégration des macros actualiser
et
modifierDoc
dans votre BD :
outils-rech.accdb
, dans une seconde copie d’Access.outils-rech.accdb
, dans la section Macros du Volet
de navigation, faites clic-droit sur l’élément appelé actualiser
,
puis choisissez Copier.actualiser
.outils-rech.accdb
, dans la section Macros du Volet
de navigation, faites clic-droit sur l’élément appelé
modifierDoc
, puis choisissez Copier.modifierDoc
.outils-rech.accdb
.
Vous devrez peut-être confirmer la suppression du contenu du
presse-papier.Facultatif : Pour visualiser la définition d’une macro, faites clic-droit dessus dans le Volet de navigation, puis sélectionnez Mode création.
documents
Nous avons déjà créé un formulaire pour la consultation (en lecture seulement) de tout document, quel que soit son type bibliographique. Nous allons modifier ce formulaire pour réaliser l’intégration recherche-consultation-modification évoquée tout à l’heure. Nous nous servirons ensuite de cette nouvelle mouture du formulaire comme base pour les autres formulaires :
Ouvrez le formulaire documents
en mode Création.
Dans la feuille de propriétés du formulaire, effectuez les réglages suivants :
et
Pour pouvoir passer directement de la consultation des documents à leur
modification, nous allons ajouter dans l’entête du formulaire un bouton qui
permettra d’accéder au formulaire de saisie approprié au type bibliographique, grâce
à la macro modifierDoc
.
Cliquez sur Conception de formulaires au menu principal.
Dans la section Contrôles du ruban, cliquez sur l’icône rectangulaire vide (marquée en jaune dans l’illustration) :
Le curseur se transforme en +.
Avec le curseur en +, tracez un rectangle dans l’entête du formulaire, à peu près à l’endroit et de la taille illustrés ici :
Ce rectangle se transforme en bouton dès qu’on relâche le bouton de la souris et l’Assistant bouton de commande démarre.
À la première étape de l’Assistant Bouton de commande, effectuez les choix suivants :
À l’étape suivante, choisissez la macro modifierDoc
:
À l’étape suivante, spécifiez le texte du bouton :
Vous pouvez maintenant cliquer sur le bouton Terminer (sans passer à l’étape suivante). L’entête du formulaire comporte maintenant un bouton « Modifier le document » :
Fermez le formulaire et confirmez la sauvegarde des modifications.
Nous allons maintenant explorer les possibilités de notre formulaire amélioré et voir comment il contribue au passage fluide entre la consultation des documents, la recherche et la modification des documents.
Ouvrez le formulaire en mode Formulaire, par exemple en double-cliquant dessus dans le Volet de navigation.
Comme vous pouvez voir, le formulaire est divisé en deux verticalement. La ligne séparatrice entre les deux parties est déplaçable et Access se souviendra de son emplacement d’une utilisation à l’autre du formulaire.
La partie du haut est en mode Feuille de données. Elle permet de se faire une idée rapide du contenu de la table consultée ou, si on applique un filtre, du résultat de l’application du filtre.
Petit bogue d’Access
Vous noterez que chaque ligne de la partie Feuille de données commence par un + encadré (⊞), signalant la présence d’une sous-feuille de données. La sous-feuille d’une ligne peut bien sûr être développée en cliquant sur le ⊞, et elle fera effectivement apparaître les auteurs associés au document. Mais cette sous-feuille est inutile, puisqu’on peut voir toutes les informations relatives à un document dans la partie du bas du formulaire, sur simple sélection du document dans la partie du haut.
Idéalement, il n’y aurait simplement aucune sous-feuille de données associée à la partie du haut. Malheureusement, un bogue dans Access empêche de n’avoir aucune sous-feuille. Il faut donc nous résigner à espérer que la présence des ⊞ ne soit pas trop distrayante pour l’utilisateur, qui devra tout simplement en faire abstraction.
La partie du bas permet de voir, en lecture seulement, les détails du document
couramment sélectionné dans la partie du haut. Si on veut modifier (ou supprimer) le
document, on accède au formulaire de saisie approprié – articles
ou
monographies
, selon le type bibliographique du document – en cliquant
sur le bouton
que nous avons ajouté et qui se retrouve maintenant dans l’entête de la partie du
bas.
Effectuez quelques expérimentations avec ce nouvel environnement, où s’intègrent de façon fluide la consultation, la recherche (par le truchement des filtres) et la modification des documents.
Ajout ou suppression de documents
Quand on « appelle » un des formulaires de saisie par le bouton , il est possible, dans ce formulaire, de supprimer le document courant et/ou de créer de nouveaux documents (du même type bibliographique que le document courant). Ces opérations sont tout à fait légitimes.
Après l’une ou l’autre de ces opérations, lorsqu’on ferme le formulaire de saisie et qu’on revient dans le formulaire principal, ces modifications ne sont pas immédiatement reflétées (en cas de suppression du document courant, les champs afficheront la mention #Supprimé).
Pour ramener l’affichage à la normale, il suffit d’appuyer sur la touche F5, ou encore de cliquer sur l’icône Actualiser tout dans la section Enregistrements du bandeau Accueil :
Notez que la façon « normale » de faire la saisie de nouveaux documents est
d’ouvrir directement le formulaire approprié au type
bibliographique : articles
pour un article et
monographies
pour une monographie.
Comme les formulaires articles
et monographies
sont
maintenant intégrés aux scénarios de recherche / consultation / modification des
documents, il est encore plus pertinent de les doter d’une grande convivialité.
C’est pourquoi nous apportons maintenant à ces formulaires des modifications qui en
amélioreront l’utilisabilité.
monographies
Ouvrez le formulaire en mode Création.
Entête du formulaire
En l’état, l’entête du formulaire indique « documents » :
L’entête sera plus précis si l’on remplace « documents » par « monographie ». Double-cliquez sur le mot « documents » et remplacez-le par « monographie » :
Indication des champs obligatoires
Hormis AUTR, que nous traiterons plus loin, les champs obligatoires pour une
monographie sont : TITR, DATP, EDIT et COLL. D’autres champs sont obligatoires au
niveau de la table documents
, mais ils n’ont pas besoin d’être portés à
l’attention de l’utilisateur à la saisie, soit parce qu’ils ont une valeur par
défaut, soit parce qu’ils sont gérés par Access.
Pour indiquer les champs obligatoires, nous allons mettre leur intitulé en rouge :
que vous disposerez ainsi dans le haut de la section Détail du formulaire :
Le numéro de l’étiquette (195) sera probablement différent. Le texte de l’étiquette paraîtra maintenant en rouge :
Directive de saisie pour champ AUTR
À cause de la façon dont est fait le formulaire AUTRocc
, utilisé comme
sous-formulaire du formulaire monographies
, il n’est pas possible de
faire afficher le nom de champ AUTR en rouge. Nous allons compenser cette lacune en
ajoutant une directive de saisie juste au-dessus du sous-formulaire :
AUTRocc
). Inscrivez-y le texte
« Inscrire au moins un auteur (AUTR) » et faites-la afficher en rouge. Le résultat
aura cette allure :Sauvegarde et vérification du formulaire
Sauvegardez le formulaire et passez au mode Formulaire pour vérifier l’apparence de l’ensemble :
Si nécessaire, retournez au mode Création pour effectuer les ajustements requis.
articles
Procédez de façon analogue avec le formulaire articles
, avec les
paramètres suivants :
Tel que mentionné précédemment, outre la table
documents
, une recherche peut avoir comme point de départ une des jointures permettant la recherche dans les champs à
occurrences multiples ou une requête à paramètres. Dans les deux cas, il
s’agit de requêtes sauvegardées dans notre BD.
Pour chacune de ces requêtes, on peut facilement créer un formulaire qui nous
permettra d’intégrer avec fluidité la recherche et la consultation des documents.
Nous allons faire l’exercice avec la jointure docs-AUTR
, mais le
principe est le même avec les autres jointures et avec les requêtes à
paramètres :
documents
, puis sélectionnez Copier.docs-AUTR
(le même nom que la requête) comme nom de
formulaire.Il s’agit donc d’inscrire le nom de la requête comme Source.
Si la requête n’est pas une jointure, l’opération est terminée : fermez et sauvegardez le formulaire. S’il s’agit d’une jointure, poursuivre avec les étapes suivantes :
Une liste de tous les champs dans la requête s’affichera; pour
docs-AUTR
, cette liste est :documents
. Pour docs-AUTR
, seul le champ
AUTR
est dans ce cas.AUTR
. Le champ
sera ajouté quelque part dans le formulaire; l’emplacement importe peu :Encore ici, l’emplacement exact importe peu.
Quand tous les champs identifiés à l’étape 6 ont été traités à l’étape 7, l’opération est terminée : fermez et sauvegardez le formulaire.
Si désiré, vous pouvez rouvrir en mode Formulaire le formulaire tout juste
sauvegardé et réordonner les colonnes de la partie du haut de façon à rendre plus
faciles à voir les champs identifiés à l’étape 6. Par exemple, pour
docs-AUTR
, on pourrait souhaiter positionner le champ
AUTR
juste à la droite de TITP
:
Pour déplacer une colonne, procédez comme vous avez fait ci-dessus pour le champ DACR
.
Lorsqu’un formulaire basé sur une jointure est utilisé comme point de départ d’une recherche et que l’on modifie un document en cliquant sur le bouton , le phénomène suivant peut se produire.
Si, pendant la modification du document, on ajoute et/ou supprime
une ou des occurrences d’un champ à occurrences multiples faisant partie de la
jointure (AUTR
et/ou DESC
), alors au moment où on ferme le
formulaire de saisie et qu’on retourne au formulaire principal, les occurrences ne
sont pas automatiquement mises à jour dans la partie Feuille de données de ce
dernier (la partie du haut).
Voici un exemple avec le formulaire docs-DESC
:
monographies
pour modifier le document 1 :puis on le retire en appuyant sur Suppr. (Del). Il faut confirmer la suppression en cliquant sur Oui :
monographies
, et on se retrouve
au formulaire principal (docs-DESC
) :