Cours SGBD Acces

Cours SGBD Acces avec exemples de pratique
...
Les Base de données qui acceptent structures complexes sont dits hiérarchiques ou réticulaires. Puisque l’usage des DB hiérarchiques est complexe, ils ont été remplacés par les Bases de Données Relationnels qui contiennent un ou plusieurs tableaux dans les quels les colonnes sont les champs, et les lignes sont les fiches. La simplicité de la structure relationnelle, d’autre partie, veut une certaine redondance représentée par un champ en commune entre certaines tableaux. La représentation relationnelle des données de l’exemple de la Figure 1 2 origines le tableau de l’état civil et le tableau augmentation; étant la colonne commune la matricule.
Prénom Nom Matricule .....
ROSSI JEANNE 805567 ...
BIANCHI ETIENNE 231784 ...
VERDI PAUL 901526 ...
Figure1 3 Table état civil
Matricule Montant Date .....
805567 30 31/08/1998 ...
231784 20 30/04/1996 ...
901526 40 30/04/1999 ...
231784 30 30/04/2000 ...
Figure 1 4 Table Augmentations
La simplicité conceptuelle des DB Relationnels est évidente dans les opérations qu’on peut faire sur eux à l’aide d’un langage dit SQL (Structured Query Lanquage).
Avant de créer un logiciel ou une application , on doit faire une activité beaucoup importante, c’est à dire penser à ce qu’on veut obtenir et aux informations dont on à besoin. Cette activité est dite analyse; en particulier il faut déterminer les données qui sont nécessaire, le type d’eux (alphanumériques, nombres, date, etc.), leurs dimensions, les valeurs acceptables (domaine) et les relations entre eux.
Nom de l'attribut Type Dimension Domaine
NOM Caractères 30
DATE DE NAISSANCE Date
LIEU DE NAISSANCE Caractères 25
SALAIRE Nombre > 20000 et < 100000
...
SEXE Caractères 1 M ou F
Figure 1 5 Données, type et domaine
1.2 LES TABLEAUX RELATIONNELLES
1.2.1 DEFINITIONS
Le modèle des bases de données relationnelles a été introduit par Edgar F. Codd, en IBM , qu’il a formulé le modèle mathématique et il a spécifié un langage d’interrogation. A’ partir de son travail il est né le DB2, une des premières base de données relationnelles commerciale. Ici suivent quelques définitions.
- Les entités sont déterminées par un ensemble finit de couples <attribut, valeur> dit aussi tuple, mais il est normalement employé le mot ligne (row).
- L'ensemble des attributs est dit schéma.
- L'ensemble des possibles valeurs d’un attribut est dit domaine
- Relation est l'ensemble des tuple qu’ils ont le même schème, normalement on utilise le synonyme table.
En se rapportant à la Figure 1 6, dans la quelle la première colonne est le schéma de la Relation Employés, une possible entité pourrais être:
NOM
DATE DE NAISSANCE
LIEU DE NAISSANCE
SALAIRE
...
SEXE JEAN VALJEAN
31/10/1960
JEUVILLE
5000
...
M
Figure 1 6 Exemple d’entité
Le schéma est: {NOM, DATE DE NAISSANCE, LIEU DE NAISSANCE, SALAIRE,..., SEXE}, le domaine de l'attribut SEXE est {M, F}.
On dit clé primaire (primary key) un ensemble minimum d’attributs, s’il existe, qu’ils ont valeurs univoques, dans l'exemple la clé primaire pourrais être {NOM, DATE DE NAISSANCE}, parce que dans la Relation on peut avoir deux "ROUGE PIERRE", mais probablement avec DATE DE NAISSANCE différente, toutefois on préfère avoir comme clé primaire un code univoque numérique.
Autres éventuelles clés sont dites clés secondaires.
La diction relationnelle dérive de la possibilité de mettre en relation entre eux des tableaux différents, en fonction d’attributs communs : dans la table dessous l’attribut CodeClient met en relation les tableaux Clients et Ventes, l’attribut CodeMatériel lie les tableaux Ventes et Matériels.
Table Clients Table Ventes Table Matériels
… … …
CodeClient
NombreFacture
CodeMatériale
RagioneSociale Quantità Description
Adresse DateVente PrixUnitaire
… Prix …
CodeClient
CodeMatérial
….
Figure 1 7 Relation entre tableaux
1.2.2 OPERATIONS
L'opération de Sélection permet d’extraire des entités d’une Relation par un prédicat sur les attributs de la relation, par exemple la Sélection "SALAIRE > 5000" sur la Relation Employés, produise une nouvelle relation qui contienne seulement entités dans les quelles l'attribut SALAIRE vaut plus de 5000.
Entre Relations ayant le même schéma sont possibles les opérations sur ensembles : Union, Intersection, et Différence.
Avec Projection d’une relation R on entende la relation R' obtenue de un sous-ensemble S des attributs de R.
Le Produit de deux relations R1 et R2 (il est dit aussi Produit Cartésien) est une relation dont le schéma est l'union des schémas de R1 et R2 et qui contienne l'union de chaque tuple de R1 avec chacune tuple de R2.
Une Sélection sur le Produit de deux relations R1 et R2, obtenue par un prédicat de égalité parmi les attributs A1 de R1 et A2 de R2, (attributs ayants le même domaine), est dite equi-conjonction ou equi-join, et le résultat est une relation contenant les tuple de R1 unies avec les tuple de R2 pour les quelles vaut A1 = A2.
1.3 LES DBMS
Avec le mot DBMS on indique un logiciel qui gère des Bases de Données (BD) en modalité Client Server c'est-à-dire exécutant des requêtes de données ou de modification de la Base de Données, provenant de plusieurs Clients en même temps.
1.3.1 STRUCTURE PHYSIQUE
La structure physique d’une DBMS varie selon la spécifique Base de Données : dans les paragraphes qui suivent il y a quelques exemples.
1.3.1.1 ACCESS
ACCESS techniquement n’est pas un vrai DBMS, même s’il a des aspects d’un DBMS.
ACCESS est une Base de Données qui peut être contenue dans un seul fichier, avec l’application pour la gérer, c’est à dire le fichier peut contenir tableaux, formulaires, logiciels etc..
1.3.1.2 MySQL
MySQL est un DBMS gratuite, moyennement puissante et beaucoup utilisé pour des applications Internet.
Le Base de Données MySQL correspondent à un répertoire du disque, chaque table est composée par un fichier de données, un fichier de description du tableau et un éventuel fichier avec les indexes. Les fichiers ont des noms formé par le nom du tableau et les extensions sont : .frm contient le format du tableau, .MYD est le fichier de données, .MYI est le fichier des indexes.
1.3.1.3 Oracle
ORACLE est un des plus puissantes DBMS, sa structure est basée sur :
- un ou plusieurs fichiers de données (Data Files): ils contiennent les données et tous les informations relatives à leur élaboration,
- un ou plusieurs fichiers de log (Redo Logfiles) : ils contiennent l’histoire des modifications faites à la Base de Données ; ils sont nécessaires pour éventuelles reconstructions de la Base de Données dans le cas de fautes ou perte des données,
- un ou plusieurs fichiers de contrôle (Control Files): ils contiennent des informations générales sur la Base de Données : nom, place des archives, etc..
1.3.2 STRUCTURE LOGIQUE
Un DBMS peut avoir un ou plusieurs Base de données (dans la terminologie Oracle Tablespace), et dans eux des objets, Tableaux, mais aussi Requêtes, Indexes, Logiciels, Conteurs, …
Le requêtes ou Views ou Query sont tableaux “virtuelles”, dans le sens que dans le DBMS est mémorisé comme obtenir les données d’une ou plusieurs tableaux ou requêtes mêmes. Comme les tableaux, les requêtes peuvent être interrogées et les données modifiées et ou effacées.
On utilise les requêtes pour:
cacher la complexité de trouver des données qui sont contenus dans tableaux différents.
Présenter les informations dans une différente perspective égard à celle du tableau réel.
Ajouter un ultérieur niveau de sûreté, en limitant l’accès à prédéterminées ensembles de lignes et de colonnes d’une ou de plusieurs tableaux.
Les Indexes sont la composante de Banques de Données qui permettent l’accès rapide à des informations.
Les Logiciels sont la composante "personnalisé" du DBMS, ils sont fonctions, procédure ou élaborations que le DBMS effectue au vérifier d’évents particuliers (trigger).
Il est à remarquer que pratiquement toutes les informations qui servent au DBMS pour sa gestion sont maintenues dans des tableaux qui sont la Base de Données du système.
1.3.3 LE MOTEUR DU DBMS
Les DBMS ne sont pas simplement des fichiers d’informations, mais ils sont des gérants d’informations : dans un environnement multi usagers ils permettent l'accès en contemporanéité aux données, en assurant un haut niveau de prestation, l’intégrité des données et des solutions efficaces pour faire front aux fautes du à dégât physique. Les DBMS exécutent aussi des taches prédéterminées et automatiques, comme le journal des activités, la gestion des indexes et des espaces, l’exécution d’instructions liées à certaines évents (trigger, fermeture du travail…), etc..
1.4 LE "LANGAGE" SQL
SQL est devenu le standard pour accéder aux données contenues dans les Bases de Données relationnelles. Techniquement SQL il n’est pas un langage de programmation complet, ils manquent en effet des instructions pour conditionner l'exécution ; il est surtout un outil pour interagir avec un BD relationnelle à niveau logique, avec une haute abstraction de l'implémentation des données.
Entre les possibilités de SQL on a :
création, modification et effacement d’objets,
interrogation de données, le résultat est une relation,
insertion, modification et effacement de lignes.
Ici il y a seulement un aperçue de SQL selon la syntaxe accepté par ACCESS ; il faut noter, toutefois, que ACCESS contient des outils que créent les nécessaires command pour la création des tableaux, des requêtes et de la mise à jour des données.
1.4.1 CREATION D’UNE TABLE
Pendant la création d’une table, outre à déterminer les champs et leur format, il est possible indiquer si celui ci est une clé et de quel type.
ACCESS (et les DBMS) acceptent beaucoup type de donnés , ici une petite liste des plus communes :
Type Description
INTEGER, LONG Pour mémoriser des nombres entier
MONEY Pour mémoriser des nombres avec quatre décimaux
AUTOINCREMENT Nombre entier qui se auto incrément pour chaque nouveau ligne
VARCHAR,TEXT Pour les champs de texte jusqu à 255 caractères, ex. TEXT(12)
DATE Pour mémoriser des dates et heures
MEMO Pour mémoriser texte de longueur supérieure à 255 ou données non textuels comme images, sons, etc.
Figure 1 8 Types de donnés
Exemples :
CREATE TABLE agents (
IdAgent AUTOINCREMENT PRIMARY KEY,
Agent VARCHAR(30) NOT NULL,
IdResp INTEGER,
Montant DOUBLE
)
CREATE TABLE ventes (IdV AUTOINCREMENT PRIMARY KEY, IdAgent INTEGER,
Montant DOUBLE, Ville TEXT(25) NOT NULL)
CREATE TABLE villes (IdAgent INTEGER,Ville TEXT(25) NOT NULL)
PRIMARY KEY engendre un index univoque et pas nulle sur la colonne nom. L’indication NOT NULL de la colonne Agent indique que la colonne ne pourra pas être vide.
Pour modifier une table le command est ALTER TABLE nomdetable ... :
Exemples :
- Ajouter un champ : ALTER TABLE clients ADD COLUMN Telephone TEXT(20)
- Modifier un champ : ALTER TABLE clients MODIFY COLUMN Nom TEXT(30) NOT NULL
- Effacer un champ : ALTER TABLE clients DROP COLUMN Province
L’instruction pour éliminer une table est : DROP TABLE nomdetable.
1.4.2 LES INTERROGATIONS
La figure suivante montre la structure du commando SELECT de SQL qui opère sur une ou plusieurs relations:
SELECT Schema projection
FROM Relation(s) (Table) Introduise la (les) relation(s)
WHERE Condition(s) Sélection
GROUP BY Attribut(s) Groupement d’attributs
ORDER BY Attribut(s) Ordre de présentation des données
Figure 1 9 Structure du commande SELECT
Seulement les clauses SELECT et FROM sono nécessaires.
Le command SELECT est suivi des données qu’on veut voir ; celui-ci peut être :
- * tous les champs,
- une liste de champs et/ou de fonctions sur eux, séparés par , (virgule).
Les fonctions acceptées par ACCESS sont les même de Visual Basic.
La commande visualise les données voulus avec un entête formé par le nom du champ, toutefois est possible indiquer un autre nom, surtout pour les champs calculés, avec la syntaxe suivante :
SELECT ... nom AS entête, ...
Tous les champs *
Quelques champs Nom, Adresse, Ville, ...
Valeurs calculées ..., Montant * 1,20, ...
Champs avec entête de l'usager ..., Montant * 1.20 AS [MONTANT + IMPOT], ...
Figure 1 10 Exemple de schéma
Exemples :
- SELECT * FROM anag
- SELECT nom, adresse, Montant * 1.20 AS [Montant lourd], Préfixe + '/' + téléphone AS télé FROM anag
1.4.2.1 La clause FROM
FROM indique le tableau ou les tableaux dont on veut les données. Le tableau peut être aussi engendrée par un command SELECT. La syntaxe est :
SELECT ... FROM relation1[[AS] alias1],relation2[[AS] alias2],...
Où relationn est le nom d’une tableau, d’une requête ou une SELECT.
Quand il y a plusieurs tableaux on peut indiquer des champs de tous les tableaux. Dans la liste des champs de SELECT les ambiguïtés (nom de champs égales dans les différentes tableaux), sont évité par la syntaxe :
SELECT ...,nomdetable.nomdechamp, ... FROM ...,nomdetable,...
Où nomdetable est le nom du tableau ou le nom assigné par la clause AS aliasn.
Exemples
- SELECT nom, anag.province, chieflieu FROM anag, tab_pro
- SELECT F.nom,Quantitè FROM farm AS F,
(SELECT nom, sum(qty) AS Quantitè FROM Med GROUP By Nom) AS M
WHERE F.nom = M.nom
1.4.2.2 La clause WHERE
Avec la clause WHERE on choisit les lignes du tableau que on veut voir, la clause est suivie par une expression qui est évalué pour toutes les lignes du tableau ; si la relation est vraie la ligne sera choisie.
- SELECT nom, anag.province, chieflieu FROM anag, Tab_pro
WHERE anag.province = Tab_pro.province
Dans expression les constants caractères sont entre apostrophes.
Les opérateurs de confrontation sont =, >, <, >=, <=, LIKE,IN. Les opérateurs logique AND, OR et NOT sont utilisable dans la condition :
- condition1 AND condition2 sera vraie si tous les deux conditions sont vrais,
- condition1 OR condition2 sera vraie si au moins une condition est vraie,
- NOT condition sera vraie si la condition est fausse.
LIKE est utilisé pour des confrontations avec le contenu partielle des champs de texte, à l’aide de caractères de masque * et ? (wild card) :
- * quelconques ensembles de caractères
- ? un caractère : ex. ?oss
- SELECT * FROM ANAG WHERE Nom LIKE '?oss*' trouve Rossati, Rossi, rossini, Fossati, etc.
Examples:
SELECT * FROM ANAG WHERE Province IN ('AL','NO')
SELECT * FROM ANAG WHERE Province NOT IN ('AL','NO')
SELECT * FROM ANAG WHERE Quantité > 4 AND Quantité < 11
1.4.2.3 La clause ORDER BY
Pour obtenir les données ordonnées, même avec plusieurs champ ou expression, séparé par virgule. Le mot DESC après le nom, indique un ordre descendant :
SELECT * FROM MED order by nom,qty DESC
1.4.2.4 La clause GROUP BY
La clause GROUP BY ... sert pour obtenir des donnés synthétisées. Dans le groupement peuvent seulement paraître les champs sur les quels se font les groupements et/ou des fonctions d'agrégation : AVG, COUNT, MAX, MIN, et SUM.
PR N. TOTAL PROVINCE
-- --------- --------------
CN 2 2.5
PD 1 2.7
RM 1 2.2
TO 1 1.5
VR 2 1.9
- SELECT provincia, Count(Provincia) AS 'N.', SUM(quantita) 'TOTAL PROVINCE'
FROM anag GROUP BY provincia
La liste aura implicitement l'ordre des champs de GROUP BY, a moins de la présence de la clause ORDER BY.
- SELECT bureau, MIN(salaire), MAX(salaire) FROM emp GROUP BY bureau ORDER BY MIN(salaire)
Il est possible choisir des données du tableau obtenue, par la clause HAVING, qui est analogue à la clause WHERE : WHERE agisse sur la table original, HAVING sur les résultats groupés.
SELECT Nom,SUM(Qty) AS Total FROM med WHERE Lotte > 0
GROUP BY Nom HAVING SUM(Qty) > 10
ORDER BY SUM(Qty) DESC
Ici à gauche un exemple complet.
L’exemple ci-dessous montre comme ajouter des totaux à l’aide du command SQL UNION (UNION veut des ensemble de données avec la même structure) :
SELECT Lotte,Nom, Total FROM (
SELECT Lotte AS LotteX, Lotte, nom, SUM(qty) AS Total
FROM Med
GROUP BY Lotte, nom
UNION
SELECT Lotte & 9 AS LotteX, 'Total', '' AS nom, SUM(qty) AS Total
FROM Med
GROUP BY Lotte
UNION
SELECT 99999 AS LotteX,'Total General' AS Lotte,'' AS nom, SUM(qty) AS Total
FROM Med)
XXX
ORDER BY Lottex,Nom
Figure 1 11 SELECT avec totaux
1.4.2.5 Données de plusieurs tableaux
L'opération qui produit une liste avec données appartenant à plusieurs tableaux (ou requêtes) est appelée Join, et elle est réalisé par la clause JOIN, dans laquelle il y a une condition, habituellement d'égalité, sur des champs des tableaux impliqués. Il y a plusieurs forme de JOIN, selon ce que on veut obtenir, qui sont essentiellement :
données correspondants,
tous données qui appartiennent à une tableaux avec ce qui correspondent dans l’autre tableaux,
les données d’une tableaux qui n’ont pas des correspondants dans l’autre,
tous données avec ou sans correspondance dans les tableaux.
SELECT Statistique.Ville, Agent, Montant
FROM (SELECT Ville, SUM(Montant) "MONTANT"
FROM Ventes
GROUP BY Ville) Statistique,Villes
WHERE Statistique.Ville = Villes.Ville;
VILLE AGENT MONTANT
-------------------- -------------------- ----------
Buja Condor 675
Bukavu Wamesa 57
Kiremba Luciu 500
Ngozi Rafiki 250
L'exemple à droite liste l'agent responsable pour chaque ville ou il y a eu des ventes.
On note que le premier tableau est une vue matérialisée, à la quelle on a donné le nom Statistique.
On peut lister quelconques colonnes ou expression des deux tableaux ; pour éviter les ambiguïtés des noms de colonnes égales on doit qualifier celui ci par le nom du tableau, avec l'écriture: nom_detable.nom_de_colonne.
1.4.2.5.1 DONNEES CORRESPONDANTS
La syntaxe est : SELECT ... FROM table1 INNER JOIN table2 ON condition ..., example :
SELECT agents.*,Ville FROM agents INNER JOIN Villes ON agents.idagent = villes.idagent ORDER BY montant Desc
IdAgent Agent IdResp Montant ville
5 Jaune 2 37000 Marseille
1 Rouge 0 34000 Turin
10 Brun 3 32500 Madrid
9 Beige 1 29800 Seville
2 Vert 1 23000 Milan
4 Gris 3 21000 Nice
11 Carmin 2 18700 Barcelone
7 Blanc 6 14000 Toulon
8 Azur 2 12500 Palerme
3 Bleu 1 12000 Geneve
Figure 1 12 Inner JOIN
Seulement dans ce cas on pourrait utiliser le command qui utilise la clause WHERE :
SELECT agents.*,ville FROM agents,Villes WHERE agents.idagent = villes.idagent ORDER BY montant Desc
1.4.2.5.2 TOUS DONNEES QUI APPARTIENNENT A UNE TABLE ET CORRESPONDANTS
La syntaxe est : SELECT ... FROM table1 LEFT JOIN table2 ON condition ..., dans ce cas tous données de table1 seront choisit avec éventuels données correspondent danstable2. Si on veut le contraire ou on change table2 avec table1 ou on utilise la clause RIGHT JOIN, exemple :
SELECT agents.*,Ville FROM agents LEFT JOIN Villes ON agents.idagent = villes.idagent ORDER BY montant Desc
IdAgent Agent IdResp Montant Ville
5 Jaune 2 37000 Marseille
1 Rouge 0 34000 Turin
10 Brun 3 32500 Madrid
9 Beige 1 29800 Seville
2 Vert 1 23000 Milan
4 Gris 3 21000 Nice
11 Carmin 2 18700 Barcelone
7 Blanc 6 14000 Toulon
13 Rose 6 13000
8 Azur 2 12500 Palerme
3 Bleu 1 12000 Geneve
6 Noir 1 9000
Figure 1 13 LEFT JOIN
1.4.2.5.3 DONNEES D’UNE TABLE SANS CORRESPONDANTS
ville
Rome
Naples
Paris
On utilise la clause LEFT JOIN, où la premier table est celle dont on veut le contrôle, vérifiant l’inexistence d’un champ de la deuxième table :
SELECT ville FROM Villes LEFT JOIN Agents ON agents.idagent = villes.idagent WHERE ISNULL(agents.idagent)
Figure 1 14 LEFT JOIN sans correspondants
1.4.2.5.4 TOUS DONNEES
On peut obtenir les données de deux tableaux avec l’UNION de deux requêtes :
SELECT agents.*,Ville FROM agents LEFT JOIN Villes ON agents.idagent = villes.idagent UNION SELECT agents.*,ville FROM Villes LEFT JOIN Agents ON agents.idagent = villes.idagent WHERE ISNULL(agents.idagent)
1.4.2.5.5 JOIN SUR LA MEME TABLE
Le JOIN sur la même table est indiqué comme self join :
SELECT W.Agent AS Responsable, V.Agent AS Agent, V.Montant AS Montant FROM Agents V LEFT JOIN Agents W ON W.IdAgent = V.IdResp ORDER BY W.Agent
Responsable Agent Montant
Rouge 34000
Bleu Brun 32500
Bleu Gris 21000
Noir Rose 13000
Noir Blanc 14000
Rouge Beige 29800
Rouge Noir 9000
Rouge Bleu 12000
Rouge Vert 23000
Vert Carmin 18700
Vert Azur 12500
Vert Jaune 37000
Figure 1 15 JOIN su la même table
1.4.2.6 Croisement de Données
Dans SQL d’ACCESS, il y a la possibilité de produire des données croisé avec le command TRANSFORM :
TRANSFORM aggregation SELECT champ1 FROM source GROUP BY champ1 PIVOT champ2
dont ici suit un exemple :
TRANSFORM Sum(Montant) SELECT Agent FROM rqtVentes GROUP BY Agent PIVOT Ville
Qui donne quelque chose d’analogue :
Agent Geneve Milan Naples Rome Turin
Bleu 21000 32500
Noir 13000 14000
Rouge 29800 35000 43000
Vert 37000 31200
1.4.3 MODIFICATION DES DONNEES
1.4.3.1 Insertion de nouveaux données dans une tableau
1) INSERT INTO anag (nom, adresse, cap, province, ville)
VALUES ('ROSSATI Giovanni', 'Oriani 3', '10149', 'TO','Torino');
2) INSERT INTO anag (nom, ville, province, cap)
SELECT nom, ville, province, cap FROM anag2
WHERE province = 'TO';
L’exemple 2) “copie” le colonne nom, ville, province du tableau anag2 appartenant au lignes qui satisfint à : WHERE province = 'TO' et les insère dans le tableau anag.
1.4.3.2 Variation des données d’une tableau
1) UPDATE anag SET quantite = 1.5 WHERE nom like '?oss*'
2) UPDATE anag SET adresse = 'Castelrotto 66', CAP = '23023'
WHERE nom = 'Franchi Elmo';
Attention : si on omit la clause WHERE toutes les lignes seront changé.
1.4.3.3 Effacement des données d’une tableau
1) DELETE FROM anag WHERE nom = 'Fossati'
2) DELETE FROM anag
L’exemple 2) efface toutes les données contenues dans le tableau anag, le tableau existe encore.
Pour éliminer un tableau le command SQL est : DROP TABLE nomdetable.
- ACCESS PRATIQUE
Access est un logiciel pour mémoriser et élaborer informations structurées. Access aide l'utilisateur dans toutes les phases que regardent le traitement de données: du projet des tableaux, à la réalisation de formulaires pour la gestion des données, jusqu’à la préparation des états. Le langage Basic permet d’ajouter des fonctionnalités à l’application.
Beaucoup fonctions sont exécuté avec l’aide de « Assistants », et un aide en ligne est disponible dans tous contexte par la touche F1.
Les principaux objets d’ACCESS sont:
Tableaux: sont la place où les information sont contenues; dans la définition des tableaux on détermine les informations contenues, avec ses caractéristiques, si il y a des contrôles sur les valeurs, l’éventuel valeur de défaut.
Requêtes ou query: il est un façon de voir ensemble les données d’une ou plusieurs tableaux, par exemple la facture avec les données du tableau des ventes, des clients et du magasin. Les données des requêtes peuvent aussi être le résultat d’opérations sur les données d’un tableau, par exemple si le tableau contient les champs prix et escompte, la requête peut contenir prix * escompte.
Formulaires: elles sont des interfaces graphiques pour organiser l’application, visualiser les données des tableaux ou des requêtes et pour les gérer, c’est à dire pour modifier, effacer et insérer des nouveaux données.
Etats ou report : ils sont la description pour obtenir l’états des données d’un tableau ou d’une requêtes, avec éventuels triage et totalisations.
Modules: ils permettent d’ajouter des fonctions particulières aux fonctions natives d’Access. Les modules sont écrits avec le langage de programmation VBA (), qu’il est aussi utilisé pour gérer les évents des formulaires, et des états.
Au démarre de Access, il propose:
- Nouvelle base de donnée Accces,
- Assistant, pages … pour choisir entre diverses projets-exemples,
- Ouvrir un fichier existant.
Ils existent en ACCESS deux modalité de travail : exécution, qui est le mode de travail de l’utilisateur de l’application, et mode projet qui permet de créer une application en gérant les composants de la Base des Données, c'est-à-dire tableaux, requêtes, formulaires pour l'introduction des données, états et programmation. Dans ce chapitre on examinera la modalité projet d’ACCESS.
La création d’une application est géré par des formulaires et pour la plus part des composant de ACCESS est disponible une construction conduite (Assistant).
Il y a une fenêtre pour gérer les objet d’ACCESS, choisissant un objet il est possible choisir entre la création d’un nouveau objet ou sa modification.
2.1 TABLEAUX
Il est possible créer un nouveau table, soit en indiquant les champs dans la fonction Visualisation structure , soit en copiant, et éventuellement en modifiant, une structure de table préexistant.
2.1.1 TYPE DES CHAMPS
En Visualisation structure il faut indiquer obligatoirement les noms des champs et leur type. Cette dernière indication est choisie par un menu à descente qu'il est accessible en cliquant sur le champ Type de donnée. Ici en bas une aperçue des type de champs.
type utilisé pour caractéristiques
texte adresses, noms, codes, même si numériques, ... de 0 aux 255 caractères
numéro montants, quantité, pourcentages, … entiers ou avec des chiffres décimaux
date/heure dates et heures
compteur matricules, codes clients, matériels, factures. le champ est géré automatiquement et il sert à numéroter les fiches
mémo textes, documents, images.
oui/non oui/non, vrai/faux, absent/présent.
Figure 2 1 Type des champs
Entre les choix, il y a aussi Assistant Liste de choix utile pour les champs qui peuvent contenir un numéro limité de valeurs (Sexe, Scolarité, Service, etc.). Avec l’assistant on indique ou une liste de valeurs ou un tableau qui contient les valeurs ; on verra que dans les formulaires, au lieu de saisir les valeurs, ils pourraient être choisi d’une liste déroulant .
Au-delà de nom et type, il est possible d'indiquer autres attributs du champ, ceux-ci servent à faciliter l'introduction et le contrôle des données. Ces attributs dépendent du type de donnée.
Quand un des attributs est sélectionné, il peut apparaître à droite un bouton de liste pour permettre un choix entre différentes alternatives ou un bouton avec ... qui fait apparaître une fenêtre de dialogue.
attribut utilisé pour
Dimension Indiquer la dimension maxime d’un champ texte ou numérique
Forme presque pour toutes les types, utile pour dates et montants
Masque d'input Pour faciliter l'introduction des données (surtout pour les dates)
Étiquette Aide pour l'input des données
Valeur prédéfinie Pour introduire une valeur prédéfinie
Valide si indique un contrôle formel
Message pour faute Utilisé pour signaler l’introduction de données erronées
Obligatoire Impose l'introduction du champ
Permets longueur zéro
Indexé Cree un indexe pour rendre vites les recherches et les imprimeries
Figure 2 2 Attributs des champs
Remarque Le champ Etiquette est utilisé pour donner l’étiquette aux champs des formulaires et des états, ceci permet de développer vitement et utiliser des dictions homogènes.
2.1.2 CONTROLES SUR LES CHAMPS
Date()+10 Date du jour plus 10
>= 65 Valeur majeur ou égale de 65
LIKE 'ROSS*' Accepte noms qui commencent par ROSS
'M' Or 'F' Accepte seulement M ou F
Figure 2 3 Exemple de contrôles sur champs
Dans les champs Valide si il est possible d'insérer une expression de contrôle direct ou une expression avec des fonctions de VBA ou des fonctions de contrôle écrites avec VBA par le programmateur. L'expression de contrôle peut être composée avec l’aide du "Générateur d'expressions", ceci on l’obtient avec click sur le bouton qui apparaît à droite du champ "Valide si", quand celui-ci est sélectionné.
Un éventuel contrôle d'unicité on l’obtient en indiquant le champ comme indexé et en choisissant l'option Oui duplicatures pas admis.
2.1.3 LES INDEXES
Les index sont nécessaires pour grandes tableaux, il est possible d'introduire index formé par plusieurs champs et même sur des expressions, par la fonction de menu Affichage et puis Index. La balise avec la clé indique Primary key c’est à dire un index qu'il doit être présent et univoque ; normalement est de type compteur automatique.
2.2 FORMULAIRES
Les Formulaires sont les objets qui permettent de gérer les données par introduction guidée. ACCESS permet de créer des formulaires personnalisés ou avec une Création guidée. Les formulaires sont associés, normalement, à un tableau ou à une requête. Les formulaires si obtenue sont douées par défaut, de buttons pour créer, modifier, effacer et rechercher des donnés.
2.2.1 LES OBJETS DES FORMULAIRES
Les formulaires sont des conteneurs d’objet pour insérer de données (zone de texte, zone de liste, zone de liste modifiable ou combo box), radio buttons, check box ou pour les gérer (buttons, barre de déroulement, etc..) ou pour obtenir des effets esthétique (images, lignes, fonds etc.).
A chaque objet sont associé des propriétés qui sont accédé par :
- double clique sur l’objet ou
- clique droit et choix Propriété ou
- clique sur la balise des propriétés : .
2.2.2 CREATION D’UN FORMULAIRE
On peut engendrer un formulaire par la fonction Créer un formulaire a l’aide l’Assistant ou le bâtir soi même déplaçant les objet sur la fenêtre. Les objets sont choisis dans la Boite a outils (Menu Affichage, Boite a outils) ou la balise .
- Texte est utilisées pour insérer du texte ou visualiser des informations, les textes peuvent être associés à des champs d’une table ou être engendré par une formule.
- Liste et Liste déroulant pour choisir des données entre un ensemble fixe de valeurs, la liste déroulant peut aussi permettre l’introduction d’un texte pas présente dans la liste (propriété Limiter à list No). Si dans la boite des outils la balise est choisie, une procédure conduite permettra d’indiquer si les données sont dans une Table ou sont obtenue par une Requête ou sont indiqué directement.
- Bouton pour exécuter des commands, si la balise est active, on est conduit sur des choix entre plusieurs actions et il est automatiquement engendré le code VBA pour la gestion.
- Case à cocher et Bouton d’option.
L’Assistant engendre un formulaire pour insérer les valeurs des champs comme zone de texte ou de case à cocher pour les données de type Oui/Non et des listes déroulantes dont on à utilisé l’Assistant Liste de choix ; le formulaire est engendré avec des boutons standard pour le déplacement entre les données.
2.2.3 PROPRIETE ET EVENEMENTS DES FORMULAIRES
On accède aux propriétés et événements des formulaires en sélectionnant le formulaire avec un click sur le bouton en haut à gauche au croisement des règles. Ici de suite quelques propriétés.
propriété valeur caractéristiques
Étiquette texte titre du formulaire
Style du borde (BorderStyle) numéro il détermine aspect et fonctionnalité du formulaire (dialogue) popup, redimensionnable
Boutons de déplacement oui/non pour se déplacer, en avant, en arrière, début, fin, nouveau record
Bouton de fermeture oui/non
Image bitmap fond du formulaire
Origine données texte le nom d'un table ou d'un requête ou une instruction SQL SELECT
Trie pour texte le nom d'un champ
Ici de suite quelques événements associé au formulaires :
événement caractéristiques
Sur chargement (onLoad) pour modifier des propriétés du formulaire avant qu’il soit visualisé
Sur ouverture (onOpen) pour opérations précédentes la première visualisation de données
Sur activation (onCurrent) avant de chaque visualisation des données
Sur fermeture (onClose) pour les opérations à la fermeture du formulaire
2.2.4 PERSONNALISATION D’UN FORMULAIRE
Sélectionner le formulaire et choisir Modifier, en cliquant sur l’objet il est sélectionnée et vous pouvez le déplacer et modifier sa taille. Chaque élément a des propriétés et peut réagir à des événements ; propriétés et événements dépendent du type de l’objet.
Ici une liste de quelques propriétés de la zone de texte :
propriété note
nom (name)
visible (visibile)
active (enabled) se vrai permet d’insérer et modifier le texte
verruillé (looked) se vrai permet ne permet pas de modifier le texte
hauteur, largeur, gauche, haut (height, width, left, top) dimension et position sur la fenêtre
police, taille, … (fontname, fontsize, …)
source du contrôle (controlsource) peut être un champ d’une table ou d’une requête ou une expression
Figura 2 4 Propriétés de la zone de texte
2.2.4.1 Dimension des fenêtres
Les dimensions (hauteur et largeur), dans les fenêtres pas à l'écran plein, ils devraient être dans la proportion 1:1.6, ça correspond à le nombre d'or à peu près 1.61803… qui vient de la proportion 1 : x = x : 1 – x.
2.2.4.2 Alignement et taille des objets
- Aligner des objets sur une fenêtre il faut les sélectionner : clique de la souris en poussant la touche shift, un clique sur la guide numéroté en haute ou à gauche sélectionne tous les objets en vertical ou horizontal. Apres Format, Aligne ... .
- Même taille : sélectionner et Format, Taille ... .
- Petits modification de taille : sélectionner et touche shift avec touches directionnelles.
- Petits déplacement : sélectionner et touche control avec touches directionnelles.
2.2.4.3 Changer un texte en liste
On peut modifier le type d’objet, par exemple on peut transformer une zone de texte en zone de liste ou une liste déroulant pour choisir des données au lieu de les insérer par clavier ; ceci est surtout utilisé où les valeurs possibles sont en nombre fixe et limité, ou doivent appartenir à une autre tableau, par exemple un choix de zone géographique, ou le nom du matériel qui est dans la table Magasin.
La procédure est :
- cliquer sur l’objet avec la touche droite de la souris,
- choisir Remplacer par …,
- choisir Zone de liste déroulante ….
Pour indiquer les données à choisir par la liste déroulant :
- sélectionner les propriétés du combo box,
- onglet Données,
- la propriété Origine source permet de choisir entre : Table/Requête, Liste valeurs, Liste des champs,
- dans la propriété Contenu :
o si Table/Requête on peut choisir dans une liste de Tableaux et Requêtes ou créer une requête ; le résultat est une ou plusieurs colonne de données, la propriété Colonne lié indique la colonne de control ; dans onglet Format la propriété Nbre colonne indique le nombre de colonnes affichées, la propriété Largeurs colonnes donne la largeur des colonnes affichées, par exemple si on veut pour choisir le nom du matériel, les propriétés vues sont semblables à :
Origine source : Table/Requête
Contenu : Magasin
Colonne lié : 1 c’est le CodMateriel
Nbre colonnes : 3 CodMateriel, Description, Quantité
Largeurs colonnes : 0cm;3cm;1cm
L’effet de 0cm; dans Largeurs colonnes est que on verra seulement Description et quantité.
o si Liste valeurs on insère une liste de valeurs entre apostrophes et séparé par ; (point virgule), par exemple 'F';'M'.
o si Liste des champs on choisit dans une liste de Tableaux et Requêtes, le résultat sera la liste des noms des champs.
2.2.4.4 Insertion de données pris d’une autre table
On peut prélever des informations appartenant à une autre table par les fonctions d’agrégation comme RechDom, SomDom, CpteDom , etc, à l’aide du Générateur d’expression (balise avec … à droite de la proprieté Source contrôle) :
- ajouter les textes où on veut insérer les données d’une autre tableau,
- dans l’onglet Données insérer dans la propriété Source contrôle l’instructions DLookup, avec la syntaxe : = RechDom ("nomchamp";"nomtable";"condition"),
- éventuellement protéger le champ (propriétés Activé et Verrouillé).
condition ha la même structure de la condition de la clause WHERE dans les commands SELECT SQL.
Exemples :
- =RechDom("[Compound]";"Farm";"[Nom]='" & [Nom] & "'")
- =SomDom("[Qty]";"Med";"[Nom]='" & [Nom] & "'")
2.2.5 FORMULAIRE ET SUB FORMULAIRE
Pour insérer un formulaire dans un autre formulaire, par exemple dans le formulaire de la Facture le formulaires des produit vendu (relative à chaque facture) :
- Ouvrir en modification le formulaire conteneur,
- Choisir de la boite à outils la balise Sous-formulaire/Sous-Etats ,
- Choisissez sur le formulaire où insérer le sous-formulaire ; un Assistant conduit, et si les noms des champs de liaisons sont égaux, par exemple soit Facture soit Produit contiennent le champ IDFacture, il y a presque rien à ajouter.
2.3 REQUETES
Les requêtes sont utilisées pour lier ensemble les données de deux ou plusieurs tableaux ou requêtes, par exemple la requête pour obtenir une facture utilisera les données des tableaux Ventes, Clients et Magasin. Cette technique exige que ces tableaux aient des champs en commune, voir le schéma de Figure 1 7 le champ CodeClient met en relation les tableaux Clients et Ventes et le champ CodeMatériel lie les tableaux Ventes et Matériels.
Pour engendrer une requête on peut choisir entre Créer une requête en mode Création o Créer une requête à l’aide de l’Assistant.. Dans le premier cas on choix les tableaux et/ou les requêtes voulues. Si les champs de liaison ont le même nom dans les tableaux (comme dans l’exemple), ACCESS effectue lui-même la liaison, dans le cas contraire ont doit indiquer les champs de liaisons (bouton droit de la souri pressé sur le nom du tableau que on veut lier, joindre le nom de l’autre table et relaisser la touche).
Pour indiquer les champs à insérer dans la requête : bouton gauche de la souri pressé sur le nom du champ que on veut insérer et le déplacer sur une cellule en bas.
Dans la cellule en correspondance a Tri : et au nom du champ on peut indiquer l’éventuel tri de la requête.
On peut insérer des critères de choix Dans la cellule en correspondance a Critères : et au nom du champ, par exemple si on indique "F" en correspondance du champ Sexe, la requête affichera seulement les ligne des femelles.
Naturellement il est possible insérer une requête comme command SQL : menu Affichage, Affichage SQL et insertion dans la zone de texte, par exemple :
SELECT agents.IdAgent, Agent, ventes.Montant, Ville
FROM agents INNER JOIN ventes ON agents.IdAgent = ventes.IdAgent
2.4 MODULES
Est la partie qui contient le code VBA : chaque formulaire et états peut avoir du code pour gérer des événements ; en outre variables et fonctions communes, indiqué par Global et Public respectivement, doivent être écrits dans un module dit global :
Global Const SortProgr = 3
Global SortAlunos
Public Function SeeTableaux(Optional Table)
' si le tableau existe la fonction répond avec le nom du tableau même,
' sinon avec la lista des tableaux separé par ;
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for objects in AllTable collection.
Itm$ = ""
For Each obj In dbs.AllTable
If Left(obj.Name, 4) <> "MSys" Then
If IsMissing(Table) Then
Itm$ = Itm$ & ";" & obj.Name
Else
If Table = obj.Name Then
SeeTableaux = Table
Exit Function
End If
End If
End If
Next obj
SeeTableaux = Mid$(Itm$, 2)
End Function
Figure 2 5 Fragment de module Global
2.5 ETATS ET ESTRACTION DE DONNEES
Pour engendrer un état on peut choisir entre Créer un état en mode Création o Créer un état à l’aide de l’Assistant. Ils sont des façon de travaille analogues à celle des formulaires.
Comme les formulaires, les états ont propriété et événements, en particulier l’événement Sur ouverture peut être utilise pour changer le triage et/ou choisir entre les données.
2.5.1 CREATION ET MODIFICATION D’ETATS
Les Etats se préparent et modifient presque comme les formulaires.
2.5.1.1 Ajouter des totaux
Il est possible ajouter des totaux ou des calcules à un état dans les zones En-tête de groupe et Pied de groupe pour les calcules partiels, et dans la zone Pied d’état pour les calcules globaux. Ces formules sont dans une zone de texte ou la propriété ControlSource contient une formule, exemple =Somme([Montant]).
Les zones Pied de groupe ne sont pas normalement visibles, pour les rendre visibles : dans le menu Affichage choisir Trier et grouper et choisissez Oui dans la zone Pied de groupe.
2.5.1.2 Choisir les données
Dans l’événement Sur ouverture d’un état on peut insérer des choix sur les données en modifiante la propriété Filtre de l’état, on peut aussi le command DoCmd.OpenReport, qui est engendré automatiquement par le bouton de création d’état ; ce command prévoit un paramètre utilisé pour choisir entre les fiches, dans l’exemple il y a les instructions VBA pour choisir les données (en gras les instructions ajouté ou modifiées).
Private Sub cmdEtat_Click()
On Error GoTo Err_cmdEtat_Click
Dim stDocName As String
where = "year(DatePrete) = " & Annee & " AND Month(DatePrete) = " & Mois
stDocName = "etLouages"
DoCmd.OpenReport stDocName, acPreview, , where
Exit_cmdEtat_Click:
Exit Sub
Err_cmdEtat_Click:
MsgBox Err.Description
Resume Exit_cmdEtat_Click
End Sub
Figure 2 6 Exemple d’état avec choix des données
2.5.2 TRIER LES DONNEES AVANT D’IMPRIMER
Quand on prépare un état en Mode Création, on peut aussi indiquer un triage, toutefois celui ci peut être modifié dans l’événement Open.
Dans les liste simples on doit insérer dans la propriété OrderBy le ou les champs de triage (même syntaxe de la clause ORDER BY de SELECT) et mettre vrai dans la propriété OrderByOn :
Me.OrderBy = "Nom, Qty DESC"
Me.OrderByOn = True
Les listes avec groupement ont déjà un triage, celui du champ de groupement ; pour changer on agit sur la proprieté ControlSource du groupement approprié :
Me.GroupLevel(0).ControlSource = "Nome" ' premier niveau de groupement