Vous êtes sur la page 1sur 12

ue v u n u i p i u n u t ta pi u j j i d i m i m i i u i i u c L r n i

3.1. C r é a t i o n d'une base de d o n n é e s :


3.Etape de c r é a t i o n d'une base de D a n s c e q u i s u i t , o n u t i l i s e r a u n e x e m p l e p r a t i q u e p o u r créer u n e b a s e d e
d o n n é e s avec Delphi données.

L a création d ' u n e b a s e d e données a v e c D e l p h i p a s s e p a r q u e l q u e s étapes :


• Etape 1 : C o n c e p t i o n d e l a b a s e d e données.
• Etape 2 : Définition d e s s t r u c t u r e s d e c h a q u e t a b l e . S o i t à créer u n e b a s e d e données 'Etudiant' comportant les informations
suivantes :
• Etape 3 : S a i s i e d e s données, q u i p e u t s e f a i r e a u s s i ultérieurement.
» Numéro étudiant
• Etape 4 : Définition d e l ' a l i a s p o u r p e r m e t t r e a u p r o g r a m m e d'accéder a u x * Nom
données d e l a b a s e .
• Prénom
!
*• Etape 1 : L a c o n c e p t i o n d e l a b a s e d e données p a s s e p a r l ' a n a l y s e d e s
• Date de naissance
données q u i d o i t c o n t e n i r l a b a s e , c e t t e a n a l y s e a b o u t i t à l'élaboration d ' u n
» Numéro de la section
schéma r e l a t i o n n e l q u i répartit l e s données d a n s d e s t a b l e s e t d o n n e a u s s i l e s
r e l a t i o n s q u i e x i s t e n t e n t r e ces t a b l e s . * Année d'entrée
» Spécialité
• Etape 2 : E n c o n n a i s s a n t l e s t a b l e s q u e d o i t renfermé l a b a s e d e données, o n * Année d'étude
d o i t à présent définir l a s t r u c t u r e d e c h a q u e t a b l e : • Définition des champs de l a base de données :
» Les champs d e chaque table. U n c h a m p est défini p a r s o n nom, l e type d e données q u ' i l c o n t i e n t e t s a taille. L e
n o m d u c h a m p d o i t s a t i s f a i r e d e u x critères très i m p o r t a n t s :
• L e t y p e d e données p o u r c h a q u e c h a m p (caractère, numérique, l o g i q u e ,
date, . . . ) . 1- I l d o i t être Significatif: i l évoque l ' i n f o r m a t i o n q u ' i l représente.
• L a taille de chaque champ. 2 - I l d o i t être Concis : i l n e d o i t pas être t r o p l o n g p o u r f a c i l i t e r s o n e x p l o i t a t i o n .

•» Etape 3 : L a s a i s i e d e s données p e u t s e f a i r e d ' u n e manière d i r e c t e e n L e s c h a m p s d e l a b a s e d e données ' E t u d i a n t ' p e u v e n t s e présenter a i n s i :


r e m p l i s s a n t les tables par leurs enregistrements (ce q u i e s t chose rare), c o m m e
N u m E t u d : J d e type numérique ( 0 4 cases)
i l p e u t s e f a i r e p a r p r o g r a m m a t i o n , c'est-à-dire à t r a v e r s u n e i n t e r f a c e
u t i l i s a t e u r q u i p e r m e t d'éditer l e s données d a n s u n e t a b l e . Nom : ; d e t y p e alphabétique ( 2 0 caractères)^
Prénom : \e t y p e alphabétique (20_caractères)
* Etape 4 : L a définition d e l ' a l i a s , s i g n i f i e l a spécification d u c h e m i n d'accès DateN: _ ! detype D a t e
a u x données d e l a b a s e p o u r q u e c h a q u e p r o g r a m m e p u i s s e y accéder. NumJSect : j d e t y p e numérique ( 0 4 cases)
AnJEnt : yde t y p e numérique ( 0 4 cases)
Spécialité : ] d e t y p e alphabétique ( 2 0 caractères)
An_Etud : \e t y p e numérique ( 1 case)

! Cet exemple vous servira tout au long de cette partie.


1
+jPonception de l a base de données :
• Création de l a base de données :
O n doit choisir entre : i
1. Créer u n e seule fable p o u r r e g r o u p e r t o u t e s les i n f o r m a t i o n s d a n s u n s e u l f i c h i e r . • P o u r créer u n e b a s e d e données, o n u t i l i s e r a l e m o d u l e d e b a s e de-données,
a l o r s c l i q u e z s u r O u t i l s / M o d u l e b a s e d e données. Ijt m o d u l e d e g e s t i o n d e
b a s e d e données e s t chargé e n mémoire, ( o n p e u t aussi o u v r i r d i r e c t e m e n t l e ;
module base de données à p a r t i r d u m e n u démarrer d e W i n d o w s ) .
Table 1
• P o u r p o u v o i r u t i l i s e r l a base d e données, o n d o i t l u i a f f e c t e r u n alias p a r
" i i , • i, i
t— —j lequel l'utilisateur (programme) pourra la retrouver . 1

—i
Etudiant.dbf
MWSKi
Base de données : Etudiant

2 . Créer d e u x tables séparées d a n s d e u x fichiers 'Etudiant'et 'Section'


L a première t a b l e a u r a c o m m e c h a m p s :
• Num_Etud
* Nom
» Prénom
» Date_N
» NumJSect
\JH deuxième t a b l e a u r a l e s i n f o r m a t i o n s s u i v a n t e s :
• Num_Sect
• An_Ent
• Spécialité
• j\ Etud • Création d'un alias :

U n alias serra équivalent à u n c h e m i n d'accès. P a r e x e m p l e o n définit j


O n v o i t c l a i r e m e n t q u e Ce c h a m p H u m _ S e Ac lt i 'a s aE tpu pd ac or mamîe t n o dm da enl'alias
l ( s Cq eu is a p ao uer cuh epm ci n c : \ G e s t E t u d \ B D \
t a b l e s , c e l u i - c i e s t u n c h a m p d é p a r l e q u e l l e s a e w c t a b l e s s o n t r e l i é e s .
V D a n s l e module de base de données, f a i r e O u t i l s / G e s t i o n n a i r e d'alias p u i s c l i q u e r i
s u r l e b o u t o n Nouveau. \

Table 1 Table2

. ...i :
Section.dbf
J
Base de données : Etudiant
Gestionnaire d'alias
S E n t r e z l a c o m p o s i t i o n d e s c h a m p s d e l a première t a b l e t e l l e q u e l e m o n t r e l a
fenêtre s u i v a n t e :
p Aljm public Définition d'un nouvel aBa* de base de
données. Effectuez les changements, puis,
|AliasEtuof choisissez Provisoire. Création de la table dBASE pour Windows : ( S a m titre )
Alias de la base

| STANDARD Descrption des champ* : Propriétés de la table :


l y p e de pilote
C Affichei seulement les alia? public; Nom de champ Type Taille ' Dec (index
Chemin d'accès : | C:\GestEtUd\BO
<~ A/tichei seulement les alias du projet
* Afficher tous Ie3 akas
1 NUM ETUD N : 4>. Définir
73
2 NOM C : 20
3 PRENOM C 20
Parcourir... I 4 DATE N D
5 NUM SECT N 4

OK
Provisoire
Annulei
fletiret

Eiiregistrer sous... Aide


J
Spécifiez te nombre de décimales.

* D a n s l a case Alias de la base, e n t r e z A l i a s E t u d , p u i s c l i q u e z s u r parcourir


Veirou ervegiîtiernerit - -
pour e n t r e r l e c h e m i n d'accès. C l i q u e z a l o r s s u r p r o v i s o i r e p u i s s u r
r Info laie J 3
Enregistrer Sous sans r i e n c h a n g e r , d a n s les o p t i o n s p a r défaut, p o u r e n r e g i s t r e r Entogistrer £«»... Annuler j Aide
"'•
l e c h a n g e m e n t ( l ' a j o u t d e l'alias).

• Création des tables : La colonne Type représente les types des données associées aux.

champs CTÇJ C comme alphabétique (caractère) ou N comme
•S F a i r e F i c h i e r / N o u v e a u / T a b l e p u i s c h o i s i r u n p i l o t e d e b a s e d e données, p a r numérique.
exemple, D B A S E p o u r Windows Vous pouvez voir tous les types disponibles en cliquant avec le
Bouton droit dans la colonne Type. "Dans cet exemple, le champ
1 Création de table
N U M _ E T U D servira dindex primaire (clé) à notre base. Ce champ
Type de table :
permet de distinguer les enregistrements les uns des autres.
jIdBASE pout W i n d o w s (Par défaut la Base sera triée selon cette clé.
OK Annutef | Aide | La taille représente le nombre de caractères que pourra avoir le
contenu des champs (exj ici, les noms pourront être entrés sur un
maximum de 20 caractères).
Tour le type numérique, si on ne spécifie pas le nombre de
décimales la valeur par défaut sera zéro, si nécessaire indiquez te
nombre de chiffres après la virgule.

S Définissez l ' i n d e x d e cette table e n c l i q u a n t s u r l e b o u t o n Définir, u n e fenêtre !


s'affiche, sélectionnez a l o r s dans l a liste des c h a m p s , l e c h a m p N U M _ E T U D p u i s ;
c l i q u e z s u r Ok.
"S U n e a u t r e fenêtre s ' a f f i c h e p o u r l ' e n r e g i s t r e m e n t d e l ' i n d e x , v o u s p o u v e z L a s t r u c t u r e d e c e t t e t a b l e d o i t être c o m m e s u i t :
g a r d e r l e n o m proposé, p u i s c l i q u e z s u r Ok. V o u s d e v e z a v o i r d a n s l a fenêtre Intoimation strucluie de lubie d8ASt IV : Sectton.dW
précédente l e c h a m p N U M _ E T U D d a n s l a l i s t e des propriétés d e l a t a b l e . description des champ» : Eropriétesdelatabfe:
Nom de champ - Jypa Taille Dec "3
S Cliquez s u r le b o u t o n Enregistrer sous puis, choisissez A l i a s E t u d dans l a MlMèlêtiËÊÈËm • N ' o!
2 AN ENT • • < N 4
z o n e alias. D o n n e z u n n o m à v o t r e base, p a r e x e m p l e : Etudiant, puis cliquez 3 SPECIALITE ; ; 2Q; NUM SECT
4 AN ETUD ' ' N o:
sur Enregistrer.

JorKgistrejjicnt, de la \eible stius •„,_.

Enregistrât dans :

s!j Achat, dbr


^EturJartt.dbf
7g Produit .dbf
S^Sectton.dbf
SJIVente.dbf" Verrou emegé.ttement

r ru Enregistre» sou»... | Ierinoe | Aide

Nom du fichier: Enregistrer


S Voilà, v o t r e b a s e d e données e s t créée, v o u s p o u v e z a l o r s s a i s i r d e s e x e m p l e s
Type: jdBÀsërdbrf Vj Annulet
e n t s o u q u i t t e r l e m o d u l e d e b a s e d e données.
Aiat: SâAteHLtu i
3 * J
Options: <" Afficher la fatte

S N o t r e b a s e d e données e s t constituée d e d e u x tables Etudiant e t Section. O n Exercice d'application :


v i e n t d e créer l a première, p o u r l a deuxième, i l f a u t s u i v r e les mêmes étapes à U t i l i s e z l e m o d u l e d e b a s e d e données p o u r s a i s i r d e s e n r e g i s t r e m e n t s
savoir : dans les deux fichiers E t u d i a n t , d b f et S e c t i o n , d b f . P o u r cela, i l
• Création des c h a m p s ( n o m s , t y p e s , etc.) suffit d ' o u v r i r l e fichier e t utiliser l e m o d e Edition ( b o u t o n « Editer les
• Création d e l ' i n d e x ( d a n s c e cas l ' i n d e x est N U M _ S E C T ) données »).
• E n r e g i s t r e m e n t d e la t a b l e Section.
. 3 . 1 * . U t i l i s a t i o n de l'expert fiche :
L ' e x p e r t f i c h e e s t u n o u t i l D e l p h i q u i p e r m e t d e créer u n e a p p l i c a t i o n
c a p a b l e d e v i s u a l i s e r , p a r c o u r i r e t m e t t r e à j o u r u n e b a s e d e données s a n s écrire Quel type de liche vc«ie:vûus que l'expert crée '

aucune ligne de code.


Options de fiche
V o t r e b a s e d e données e s t supposée créée e t c o n t i e n t d e s e n r e g i s t r e m e n t s , .'• ËtéoTuriiëjpiB sirripM
a l o r s v o u s a l l e z s u i v r e c e s étapes p o u r définir v o t r e i n t e r f a c e e n u t i l i s a n t l ' e x p e r t Créer une fiche rriaître/détail
fiche.
Option! d'ensemble do données (DataSetl
• Créer ijne fiche avec des objets T Tafcie
Créer une fiche avw; des objets r tjuery

A p p l i c a t i o n

V o t r e base d e données d o i t être déjà créée. S i c e n'est pas l e cas, créez-la.


Suivant > Annuler
D a n s l e m e n u d e D e l p h i , faire F i c h i e r / N o u v e a u / A u t r e . C h o i s i r l'onglet
1

A f f a i r e s , p u i s c l i q u e z s u r Expert Viche Base cle données o u faites-le s i m p l e m e n t


d a n s l e m e n u d e D e l p h i : B a s e d e données/Expert f i c h e . S L a i s s e z l e s c h o i x p a r défaut {créer mie fiche simple e t créer une fiche avec TTahlé).
C l i q u e z s u r l e b o u t o n Suivant'.

SjgssfeaAJS {Wtfara
Nouveau | ActiveX MuW-tweaux ; Ouvrages | Fiches ; Dialogues i Projets ! Expert fiche base de données
Modules de données Affaires ; WebSnap • WebSetvicet I Corba
Choisissez une table h utiliser avec la fiche

Nom de table : gépertoires


Exemple Expert Expert •Ëtudiant.dbf , cSgestetudVbd
Décision Cube d'appfcatio.. m1$HrVfif| Quick Report

Ç^y GestEtud

' Expert TeeChart

Types defichiers: Lecteur ou alias :


[Tc^ielt^iësFDBF.-'.DjJ H * AÏa^tud ~ 3

•* Copier •'
Aide <. Précédent Suivant > Annuler j
OK Annuler J Aide

U n e b o i t e d e d i a l o g u e s ' o u v r e v o u s d e m a n d a n t Quel type de fiée voulez-vous créer S D a n s l a case Lecteur ou nom d'alias, c h o i s i s s e z l'alias q u e n o u s a v o n s créé
avec l'expert fiche ? ( A l i a s E t u d ) . C l i q u e z a l o r s s u r l e n o m d e v o t r e table ( E t u d i a n t ) , p u i s
c l i q u e z s u r le b o u t o n Suivant.

1 Dans le cas de D e l p h i 5 c'est « F i c h i e r / N o u v e a u » 1 Dans le cas de D e l p h i 5 c'est « Suite »


D e l p h i v o u s a généré l a f i c h e s u i v a n t e :

i «jouter des champs à l afiche,cfique: chacun d'eux


d a n s la Me des champ: disponibles, puis cliques sur ">". PS-'
P o u r chois» tous le: champ*, cliquez s u r " » " . Lâl

•temps disponibles : C h a m p s s é l e c t i o n n é s triés : NUM ETUD EditNUM


NUM_ÉTUD' NOM EdirNOM
NOM
PRENOM PRENOM EcïtPRfNOM
DATE N
N U M SECT DATE.N j EdkDATE.I

NUM.SECT JEdttNIJM.

V V o t r e p r o g r a m m e e s t terminé !! L a n c e z - l e a v e c i'O
êide < Précédent Suivant > Annuler

S V o u s d e v e z a l o r s i n d i q u e r q u e l s s o n t les c h a m p s d e l a b a s e q u e v o u s s o u h a i t e z
u t i l i s e r . V o u s p o u v e z les sélectionner t o u s e n c l i q u a n t s u r l e b o u t o n " » " . U n e Ce que D e l p h i a f u i t automatiquement pour vous :
f o i s l e s c h a m p s d e l a table sélectionnés c l i q u e z s u r l e b o u t o n Suivant. P o u r S D e l p h i a placé u n c o m p o s a n t l U Tïable s u r l a t i c h e . C e c o m p o s a n t n o u s
c h o i s i r l a d i s p o s i t i o n d e s c h a m p s s u r l a fenêtre à générer, u t i l i s e z les b o u t o n s d o n n e u n accès à n o t r e b a s e d e données. S a propriété DatabaseName
• et « c o n t i e n t n o t r e a l i a s A l i a s E t u d e t s a propriété TableName contient le n o m
S C h o i s i s s e z a l o r s u n e d i s p o s i t i o n p o u r les c h a m p s : d e n o t r e b a s e d e données ( E t u d i a n t . d b f ) .
S D e l p h i a également inséré u n C o m p o s a n t T D a t a S u w c c * C ' composant
i e

/ hritruntakment s e r t d e c a n a l (d'intermédiaire) e n t r e l e c o m p o s a n t '/Table e t d'autres


composants permettant d e visionner l e contenu d e la table, c o m m e exemple
d e c o m p o s a n t s c i t o n s TDBEdit e t TDBNavigator. S a l i a i s o n avec le
c o m p o s a n t TTable e s t matérialisée p a r s a propriété D a t a S e i q u e D e l p h i a
Verticalement (à c h o i s i r p o u r a v o i r des résultats s i m i l a i r e s d a n s l a r e m p l i p o u r v o u s a v e c l e n o m d u c o m p o s a n t TTable c'est à d i r e T a b l e l
suite d e l'exemple)
S D e l p h i a inséré a u t a n t d e TDBEdit fâBT q u e d e c h a m p s . I ! les a nommés F a i t
s u i v i d u n o m d u c h a m p . L e s TDBEdit s o n t reliés à TDafaSource par
l'intermédiaire d e l e u r propriété DataSource. D e l p h i a r e m p l i c e t t e propriété
D a n s une grille. p o u r v o u s ( e n y écrivant D a t a S o u r c o l q u i est l e n o m d e n o t r e TDataSource).
D e l p h i a également r e m p l i l a propriété D a t a F i e l d a v e c l e n o m d u c h a m p d e
n o t r e b a s e d e données d o n t l e c o n t e n u s e r a affiché d a n s l e TDBEdit.

S C l i q u e r s u r l e b o u t o n Suivant. C h o i s i r s i v o u s v o u l e z l e s libellés à gauche o u à S D e l p h i a inséré u n c o m p o s a n t TDBNavigator g t j c e c o m p o s a n t p e r m e t de*


droite ( p o u r l ' e x e m p l e : p r e n d r e à gauche) se déplacer clans l a b a s e d e données e t même d ' e n a j o u t e r o u d ' e n r e t i r e r d e s
S C l i q u e z s u r l e b o u t o n Suivant p u i s s u r l e b o u t o n Terminer e n l a i s s a n t coché e n r e g i s t r e m e n t s . C e c o m p o s a n t e s t également relié à n o t r e b a s e d e données
l ' o p t i o n générer une fiche maître ex génération dune fiche seulement. p a r l'intermédiaire d e s a propriété DataSource q u i doit contenir le n o m d'un
J TDafaSource (ici : D a t a S o u r c e l ) .
Le champion de la programmation DELPHI C h a p i t r e 5 : P r o g r a m m a t i o n d e s B . D . e n u t i l i s a n t le m o t e u r B U E 185

0 ® © ® <8>
4.Exploitation d'une base de d o n n é e s par
H
i.
M •
A . . 1 .. ! .
+ -
. 1
programme
Y " 4 . 1 . C r é a t i o n d'un programme exploitant une base de
CD (D @
données déjà créée :
F a i t a p p e l à l a méthode F / r s r / d e l ' e n s e m b l e d e données p o u r
© N o u s a l l o n s d a n s c e q u i s u i t écrire u n e a p p l i c a t i o n q u i p e r m e t d ' e x p l o i t e r
q u e l e p r e m i e r e n r e g i s t r e m e n t d e l ' e n s e m b l e d e données
n o t r e b a s e d e données q u ' o n a crée, o n v a créer a l o r s d e s procédures p o u r c h a q u e
Premier I devienne l'enregistre!nent e n cours.
événement.
! F a i t a p p e l à l a méthode P r i o r d e l ' e n s e m b l e d e données p o u r
q u e l ' e n r e g i s t r e m e n t précédent d e v i e n n e l ' e n r e g i s t r e m e n t e n S D a n s l ' o n g l e t B D E , p r e n e z u n c o m p o s a n t Table e t p l a c e z - l e s u r v o t r e f i c h e
1
©
cours. ( F o r m l ) . C e c o m p o s a n t n o u s p e r m e t d'accéder à n o t r e b a s e d e données.
Précédent
F a i t a p p e l à l a méthode Next d e l ' e n s e m b l e d e données p o u r
CD S E n t r e z d a n s s a propriété DatabaseName le n o m d e votre alias ( A l i a s E t u d
que l'enregistrement suivant devienne l'enregistrement e n
s i v o u s a v e z s u i v i l a création d e l a b a s e t e l q u e décrite d a n s c e t o u v r a g e ) .
Suivant cours.
F a i t a p p e l à l a méthode Last d e l ' e n s e m b l e d e données p o u r S D a n s s a propriété TableName, entrez le n o md e votre table
que l e dernier enregistrement devienne l'enregistrement e n (Etudiant.dbf)
®
cours. S R e n d e z a c t i f l e c o m p o s a n t Tàblel e n m e t t a n t s a propriété Active à True.
Dernier
F a i t a p p e l à l a méthode Insert d e l ' e n s e m b l e d e données p o u r
(D
insérer u n n o u v e l e n r e g i s t r e m e n t a v a n t l ' e n r e g i s t r e m e n t e n / D a n s l ' o n g l e t AccèsBD, p r e n e z u n c o m p o s a n t DataSource et placez le sur
Insertion
c o u r s e t p l a c e r l ' e n s e m b l e d e données e n m o d e I n s e r t i o n ^ v o t r e f i c h e . C e c o m p o s a n t s e r t d e c a n a l (d'intermédiaire) e n t r e l e c o m p o s a n t
S u p p r i m e l ' e n r e g i s t r e m e n t e n c o u r s . S i l a propriété TTable e t d'autres composants. C e s derniers permettent p a r e x e m p l e d e
C o n f i r m D e l e t e e s t à True, i l e s t demandé c o n f i r m a t i o n a v a n t v i s i o n n e r l e c o n t e n u d e l a t a b l e : c e s o n t p a r e x e m p l e TDBEdit et
Suppression
la suppression. TDBNavigator. ,
© P l a c e l ' e n s e m b l e d e données e n m o d e E d i t i o n a f i n d e p o u v o i r S E n t r e z T a b l e l d a n s s a propriété DataSet. Cela assure sa liaison avec l e
Edition modifier l'enregistrement en cours. composant Tablel.
E c r i t les m o d i f i c a t i o n s d a n s l ' e n r e g i s t r e m e n t e n c o u r s d a n s l a
Ecriture b a s e d e données. Il faut maintenant ajouter les composants q u i vont nous permettre d e
® A n n u l e l'édition d e l ' e n r e g i s t r e m e n t e n c o u r s , e t r e p l a c e v i s u a l i s e r e t m o d i f i e r n o t r e b a s e d e données.
l ' e n s e m b l e d e données à l'état V i s u a l i s a t i o n . * D a n s l ' o n g l e t ContrôleBD, p r e n e z u n c o m p o s a n t D B N a v i g a t o r e t p l a c e z - l e
Annulation V i d e l e s t a m p o n s d ' a f f i c h a g e d u contrôle orienté données, s u r l a fiche. C e c o m p o s a n t p e r m e t d e p a r c o u r i r l e s e n r e g i s t r e m e n t s d e l a b a s e
p u i s l e s rafraîchit à p a r t i r d e l a t a b l e o u d e l a requête d e données e t même d ' e n r a j o u t e r o u d ' e n r e t i r e r .
® p h y s i q u e . U t i l e s i l e s données s o u s - j a c e n t e s o n t p u être
Rafraîchissement modifiées p a r u n e a u t r e a p p l i c a t i o n . S R e l i e z c e c o m p o s a n t D B N a v i g a t o r à n o t r e DataSource e n affectant
D a t a S o u r c e l à s a propriété DataSource.

Exercice d'application : S T o u j o u r s d a n s l ' o n g l e t ContrôleBD, p r e n e z u n c o m p o s a n t D B E d i t e t p l a c e z -


l e s u r l a f i c h e . A f f e c t e z à s a propriété DataSource la valeur D a t a S o u r c e l
R a j o u t e z s u r l a fiche u n DBGrid ( O n g l e t ContrôleBD d e l a b a r r e des c o m p o s a n t s e t à s a propriété D a t a F i e l d l e n o m d e l ' u n d e s c h a m p s d e n o t r e b a s e d e
d e D e l p h i ) E n t r e z D a t a S o u r c e l d a n s s a propriété DataSource. V o u s a v e z a i n s i créé l e données p a r e x e m p l e N O M .
p o n t e n t r e l e DBGrid e t v o t r e base d e données. O b s e r v e z : s i v o u s m e t t e z l a propriété
Active d e v o t r e Table! à T r u e , v o u s v o y e z immédiatement l e c o n t e n u d e v o t r e b a s e d e
données s o u s f o r m e d ' u n t a b l e a u d a n s l e DBGrid \z v o t r e p r o g r a m m e -
rtnn<t 1*> ca« de Delnhi S c'est Pnnelet « AccèsBD »
Le champion de la programmation DELPHI C h a p i t r e 5 : P r o g r a m m a t i o n des B . D . e n u t i l i s a n t le m o t e u r B D E 187

S R e f a i r e l a même m a n i p u l a t i o n a v e c l e s q u a t r e a u t r e s c o m p o s a n t s D B E d i t e t A j o u t e z u n b o u t o n à v o t r e p r o j e t p u i s implémentez s a méthode (hi( 'tick a v e c


ce, p o u r l e s a u t r e s c h a m p s d e n o t r e b a s e ( N u m _ E t u d , P r é n o m , D a t e _ N la l i g n e s u i v a n t e :
et N u m _ S e c t ) . procédure T F o r m 2 . B u t t o n l C l i c k ( S e n d e r : T O b j e c t ) ; "
S V o t r e p r o g r a m m e e s t terminé, l a n c e z - l e a v e c F 9 . begin
ShowMessage(Tablel.Fields[1].AsString);
end;
-In] xi
S L a n c e z v o t r e p r o g r a m m e p o u r le tester...
S P a r l a même méthode, v o u s p o u v e z a v o i r u n accès e n écriture. A j o u t e z u n
Numéro étudiant : ] b o u t o n e t implémentez s a méthode O n C l i c k a v e c l e s l i g n e s s u i v a n t e s :
-M—

Nom: }ibntoumert procédure T F o r m 2 . B u t t o n 2 C l i c k ( S e n d e r : TObject);


begin
Prénom : M e h d i Tablel.Edit; ' { 1 }
T a b l e l . F i e l d s [ 1 ] . A s S t r i n g : = 'Marneri';
Date d e naissance : j 1 4 / 0 6 / 1 9 7 3 end;
Section: f ~
Tablel. Edit { 1 } permet de se mettre en mode Edition, c'est
indispensable pour p o u v o i r modifier un champ.

N . B : I 'anspouve^ ajouter cinq (OS) composants L a b e l pour étiqueter les cinq champs. S L a n c e z v o t r e p r o g r a m m e p o u r le tester...

4 . 2 Modifier le contenu des champs p a r p r o g r a m m a t i o n : L'inconvénient de cette méthode est q u ' i l f a u t connaître
f'empfacetnent des champs. Si on modifie Tordre des champs, notre
I l e x i s t e d e u x façons d'accéder ( l i r e o u écrire) a u c o n t e n u d e s c h a m p s : p a r
programme ne fonctionnera plus correctement. If est donc
le n°du champ o u p a r s o n nain.
préférable d'accéder par Ce nom du champ.
a. A c c è s p a r le n ° du c h a m p :
L e s o b j e t s TTable possèdent u n t a b l e a u d e c h a m p s F i e l d s . A t t e n t i o n , c e
b . A c c è s par le nom du c h a m p :
tableau c o m m e n c e à l'indice 0 .
L a f o n c t i o n F i e l d B y N a m e n o u s p e r m e t u n accès p a r l e n o m d u c h a m p :
D a n s cet e x e m p l e , si o n fait :
function FieldByNameconst(FieldName:string):TField;
Variable:«Tablel.Fields[Qj.AsString ;
C e t t e f o n c t i o n n o u s p e r m e t d'accéder d i r e c t e m e n t a u x propriétés e t méthodes
Alors V a r i a b l e contiendra lavaleur du premier champ.
spécifiques d ' u n c h a m p d o n t o n connaît l e n o m .
A s S t r i n g e s t u n e propriété q u i p e r m e t d e c o n v e r t i r l e t y p e d u c h a m p e n O n p e u t d o n c m o d i f i e r l'implémentation d e l'événement O n C l i c k d u p r e m i e r
String. bouton :
I l e x i s t e d ' a u t r e s possibilités d e c o n v e r s i o n : A s l n t e g e r , A s B o o l e a n , procédure T F o r m 2 . B u t t o n l C l i c k ( S e n d e r : T O b j e c t ) ;
AsFloat, AsCurrency. AsDateTimeetA s V a r i a n t . begin
ShowMessage(Tablel.FieldByName('Nom').AsString);
Si o n m e t par e x e m p l e V a r i a b l e : = T a b l e l . F i e l d [ 0 ] . A s F l o a t e t s i end;
le c h a m p c o n t i e n t u n S t r i n g , c e l a déclenche u n e e x c e p t i o n .
E t l'implémentation d e -l'événement O n C l i c k d u s e c o n d b o u t o n : 4 . 4 . Se d é p l a c e r dans la base de d o n n é e s afin d'effectuer
un t r a i t e m e n t dans un champ :
procédure T F o r m 2 . B u t t o n 2 C l i c k ( S e n d e r : TObject);
begin L e s m o d e s d e déplacement expliqués c i - d e s s u s p e r m e t t e n t également
Tablel.Edit; d ' e x a m i n e r t o u s les e n r e g i s t r e m e n t s a f i n d'en effectuer u n t r a i t e m e n t .
Tablel.FieldByName('Nom').AsString:= 'Mameri*;
end; Exemple :
N o u s a l l o n s m e t t r e e n m a j u s c u l e t o u s l e s caractères d e s c h a m p s N o m . P o u r
S L a n c e z v o t r e p r o g r a m m e p o u r le tester...
c e l a , n o u s a l l o n s n o u s s e r v i r , e n p l u s d e s méthodes c i - d e s s u s , d e s méthodes
suivantes :
4.3. Se d é p l a c e r dans une base de d o n n é e s : P e r m e t d e r e n d r e i n a c t i f s l e s contrôles branchés à c e t t e
R e p r e n e z l ' e x e m p l e créé précédemment à l ' a i d e d e l ' e x p e r t ( a v e c a j o u t d u DisableControls t a b l e (accélère d o n c l e t r a i t e m e n t e n évitant d e s
DBGrid). affichages i n u t i l e s dans les D B E d i t
EnableControls L e s rend actifs
L e b u t d e c e p a r a g r a p h e e s t d e découvrir l e s procédures q u i s e r v e n t à s e i ( E n d O f F i l e ) r e n v o i e t r u e s i l a t a b l e e s t v i d e , après u n
déplacer d a n s u n e b a s e d e données s a n s p a s s e r p a r l e c o m p o s a n t D B N a v i g a t o r . ; a p p e l à L a s t , o u s i u n a p p e l à l a méthode N e x t
Eof i échoue d u f a i t q u e l ' o n e s t déjà a u d e r n i e r
L e c o m p o s a n t TTable d i s p o s e d e p l u s i e u r s méthodes p e r m e t t a n t d e se j e n r e g i s t r e m e n t . C ' e s t c e d e r n i e r p o i n t q u i n o u s intéresse
déplacer d a n s l a b a s e : [dans notre exemple ( I l existe aussi B O F : B e g i n O f F i l e )
Edit i P l a c e l a t a b l e e n m o d e édition
First V a a upremier enregistrement FieldByName ('Nom • , • ,
Last i V a a u dernier enregistrement champ').AsString I ° P W
V , r, e a P h e r e c e d e n t

Prior S e p l a c e à l ' e n r e g i s t r e m e n t précédent


Next S e place à l'enregistrement suivant S A j o u t e z s u r v o t r e fiche u n b o u t o n p u i s implémentez s a méthode O n C l i c k :
M , n f . S e déplace d e / e n r e g i s t r e m e n t , s i i > 0 o n s e déplace v e r s l a fin procédure T F o r m 2 . B u t t o n 6 C l i c k ( S e n d e r : T O b j e c t ) ;
^ : d e l a t a b l e , s i n o n v e r s l e début. _____ begin
T a b l e l . D i s a b l e C o n t r o l s ; { r e n d inactif les contrôlas}
S A j o u t e z u n b o u t o n sur votre fiche. try
S A f f e c t e z s a propriété C option à First. T a b l e l . F i r s t ; { s e p l a c e sur le p r e m i e r e n r e g i s t r e m e n t }
while n o t Tablel.EOF do
S D o u b l e c l i q u e z d e s s u s a f i n d'implémenter l'événement O n C l i c k a i n s i : begin
procédure T F o r m 2 . B u t t o n l C l i c k ( S e n d e r : T O b j e c t ) ; Tablel.Edit; { s e p l a c e en m o d e édition}
begin Tablel.FieldByName('Nom').AsString:=AnsiUpperCase
Tablel.First ; (Tablel.FieldByName('Nom').AsString);
end; T a b l e l . N e x t ; {va À l'enregistrement suivant}
end;
S R a j o u t e z d ' a u t r e s b o u t o n s a f i n d e t e s t e r les a u t r e s méthodes. [ finally
{ l e b l o c try- final ly permet d'être sûr crue l'on remet
S P o u r l a méthode M o v e B y , a j o u t e r u n TEdit a f i n d e p o u v o i r f a i r e v a r i e r l e I . les contrôles actifs même s ' i l y a une exception}
T a b l e l . E n a b l e C o n t r o l s ; {remet actif les contrôles}
end;

S Voilà, c'est t o u t . C o m p i l e z e t t e s t e z . . .
4.5. C r é a t i o n d'un index secondaire et t r i de la base : O n n ' a pas besoin de c o m p i l e r le p r o g r a m m e pour v o i r l'effet o b t e n u : l'effet
e s t immédiat s i l a propriété Active d u c o m p o s a n t Tablel e s t à T r u e e t c e , dès l a
R e p r e n e z l ' e x e m p l e créé précédemment à l ' a i d e d e l ' e x p e r t . P a r défaut, v o t r e m o d i f i c a t i o n dans l'inspecteur d'objet. O n r e m a r q u e que s i o n affecte une v a l e u r
b a s e d e données e s t triée d a n s l ' o r d r e donné p a r n o t r e i n d e x p r i n c i p a l c ' e s t à d i r e à IndexFieldNames, l a v a l e u r d e IndexName e s t m i s e à b l a n c . Réciproquement s i
dans notre e x e m p l e , par NumEtud. o n a f f e c t e u n e v a l e u r à IndexName. IndexFieldNames est m i s e à b l a n c .
L a création d ' u n i n d e x s e c o n d a i r e vous permettra de trier les
enregistrements selon u n autre ordre e t d e faciliter les recherches a u sein de la
b a s e d e données. Ici nous avons choisi un t r i par un seuC champ (C\[OfM), si on a
spécifié une expression d'index, par exemple 9>{pfM et T'K^TOOd, Us
champs indexés étant dans lordre ^ O ' M puis 'F^L'HO'M, par
a. L ' i n d e x ( A j o u t d ' u n index secondaire) : i conséquent, Ce t r i obtenu est un t r i selon le nom. Tour les
L ' a j o u t d ' u n i n d e x s e c o n d a i r e v a s e f a i r e à p a r t i r d u Module de base de enregistrements ayant le même'HOM,on a un t r i par TS^L9iQM.
données ( l e p r o g r a m m e q u i n o u s a p e r m i s d e créer n o t r e b a s e d e données).
A v a n t d e r e n t r e r d a n s l e Module de base de données, i l f a u t m e t t r e à F a l s e
O n p e u t définir p l u s i e u r s index secondaires e t p a r conséquent o b t e n i r
l a propriété Active d e Tablel d e n o t r e p r o g r a m m e ( s i c e n ' e s t p a s déjà f a i t ) s o u s différents tris e n f o n c t i o n d e l'index utilisé.
p e i n e d e n e p o u v o i r m o d i f i e r l a b a s e d e données.
O n p e u t , b i e n s u r , fixer c e s propriétés p a r p r o g r a m m a t i o n .
/ O u v r e z l e Module de base de données ( m e n u O u t i l s / M o d u l e b a s e d e
données) p u i s d a n s l e m e n u F i c h i e r d e c e m o d u l e c h o i s i r O u v r i r / T a b l e .
Exemple :
/ D a n s l a c a s e alias, choisissez A l i a s E t u d e t d a n s Nom choisissez
S A j o u t e z u n b o u t o n e t implémentez s a méthode OnClick d e l a façon s u i v a n t e :
Etudiant.dbf.
procédure T F o r m 2 . B u t t o n l C l i c k ( S e n d e r : TObject);
V Choisissez le m e n u Table/Restructurer.
T a b l e l . i n d e x N a m e := ' N o m ' ;
V D a n s l a l i s t e déroulante propriétés de l a table sélectionnez index.
{tri p a r nom et u t i l i s a t i o n d e i n d e x N a m e }
E n f a i t , l a façon d e créer u n i n d e x s e c o n d a i r e dépend d u t y p e d e l a b a s e d e end;
données ( P a r a d o x , D B A S E , e t c . )
L a définition d e Y index secondaire dans ce cas se fait exactement c o m m e o n A j o u t e z u n a u t r e b o u t o n e t implémentez s a méthode OnC Tick d e l a façon
l ' a f a i t a v e c l a création d ' u n i n d e x . suivante :

V C h o i s i r c o m m e c h a m p indexé d e c e t t e t a b l e l e c h a m p ' N o m ' e t c o m m e procédure T F o r m 2 . B u t t o n 2 C l i c k ( S e n d e r : TObject);


n o m d ' i n d e x g a r d e z l e n o m proposé (NOM). E t n'oubliez pas d'enregistrer begin
ces c h a n g e m e n t s . Tablel.IndexFieldNames:='NumJEtud';
{ r e v i e n t au t r i donné p a r l ' i n d e x p r i n c i p a l en
utilisant IndexFieldNames}
b. Le t r i ( T r i e r l e senregistrements) : end;
P o u r t r i e r l e s e n r e g i s t r e m e n t s , i l y a d e u x manières :
S L a n c e z v o t r e p r o g r a m m e p o u r le tester...
• A f f e c t e r l a v a l e u r N o m ( l ' i n d e x n o m ) à l a propriété IndexName de notre
table Tablel.
• Affecter la valeur N o m (champ de l a table) à l a propriété
IndexFieldNames.
\. L a r e c h e r c h e (Faire une recherche dans une base de donnée) :
P o u r t e s t e r l a possibilité d e f a i r e u n e r e c h e r c h e s u r u n e e x p r e s s i o n d ' i n d e x
R e p r e n e z l ' e x e m p l e crée d a n s l e p a r a g r a p h e précédent.
( n o m e t prénom) :
U n e f o n c t i o n F i n d K e y e t u n e procédure F i n d N e a r e s t p e r m e t t e n t d e
S A j o u t e z d ' a b o r d c e t i n d e x e n u t i l i s a n t l e m o d u l e d e b a s e d e données e t
r e c h e r c h e r u n e n r e g i s t r e m e n t d a n s u n e b a s e d e données.
enregistrez-le avec len o m IndexNP.
• P o u r F i n d K e y c o m m e p o u r F i n d N e a r e s t , l a recherche se fait par r a p p o r t
a u c h a m p indexé. S i l ' o n v e u t p a r e x e m p l e c h e r c h e r l e p r e m i e r e n r e g i s t r e m e n t S M e t t e z u n bouton e t d e u x TEdit ( u n pour le n o m (Editl) et u n pour le
d o n t l e c h a m p N o m c o n t i e n t l a v a l e u r * M A H D I ' , i l f a u d r a s'assurer q u e n o t r e prénom (EditJ)) s u r l a fenêtre.
b a s e d e données e s t indexée s u r l e c h a m p N o m a v a n t d e déclencher
S E n f i n implémentez l'événement O n C l i c k d u b o u t o n :
FindKey ou FindNearest.
• F i n d K e y recherche u n enregistrement dont les champs correspondant à | procédure T F o r m 2 . B u t t o n 4 C l i c k ( S e n d e r : T O b j e c t ) ;
l ' i n d e x s o n t s t r i c t e m e n t égaux a u x v a l e u r s passées e n paramètres. P a r \n
exemple, si l'on a indexé à l'aide de l'index N o m : T a b l e l . i n d e x N a m e : = ' I n d e x N P ' ;
T a b l e l . F i n d K e y ( [ E d i t l . T e x t ] ) cherchera l'enregistrement dont l a {ainsi la recherche se fera sur le champ Nom p u i s
v a l e u r c o n t e n u e d a n s l e c h a m p N o m e s t égale à E d i t l . T e x t .
sur le Prénom}
• i fn o t Tablel.FindKey ( [ E d i t 2 . T e x t , E d i t 3 . T e x t ] ) then
• 'Dans Ce cas d'une expression d'index^ (par exemple 9{p'M et S h o w M e s s a g e ( ' n o n trouvé');
T'RE'HP'M. dans C'ordre) On peut faire une recherche à Cafois sur Ce i end;
nom et sur Ce prénom. TabCel.JindXeutt'LditlSïext, Edit2. TextJ) t f

cherchera Venregistrement dont Ca vaCtur contenue dans Ce champ


V F i n d N e a r e s t f o n c t i o n n e d ' u n e façon s i m i l a i r e à F i n d K e y m a i s i l
'Hom est égaCe à Editl. Text et dont (a vaCeur du champ prénom est
< (
r e c h e r c h e l ' e n r e g i s t r e m e n t l e p l u s p r o c h e d e l a v a l e u r entrée. P o u r l e t e s t e r ,
égaCe à Edit2.text.
(

a j o u t e z u n b o u t o n e t u n 7 E d i t p u i s implémentez s o n événement O n C l i c k :
• find%e.y est une fonction qui renvoie True si Venregistrement
t

recherché a été trouvé, FaCse sinon. 'procédure T F o r m 2 . B u t t o n 4 C l i c k ( S e n d e r : TObject);


* begin

* T a b l e l . IndexFieldNames :=' Num_Etud ' ;


t
Exemple :
i
D a n s l a c l a u s e u s e s , a j o u t e z l'unité D i a l o g s ( s i e l l e n ' e x i s t e p a s ) , p o u r {ainsi la r e c h e r c h e se fera sur le n° d'étudiant}
p o u v o i r u t i l i s e r u n S h o w M e s s a g e p u i s p l a c e z u n bouton e t u n TEdit ( p o u r
Tablel.FindNearest([StrToInt(Edi t4.Text)]);
p o u v o i r e n t r e r l e n o m ) s u r v o t r e f i c h e e t implémentez l'événement O n C l i c k d u
{FindNearest permet de se p l a c e r sur l'enregistrement
b o u t o n d e l a façon s u i v a n t e :
f /
qui correspond le m i e u x au critère, ici t que le
'procédure TForm2.Button3Click(Sender: T O b j e c t ) ; champ Num Etud contient la valeur numérique écrite
\n dans Edité.Text,}
Tablel.indexName: «'Nom'; î end;
(ainsi la recherche se fera sur le champ Nom}
i f nqt T a b l e l . F i n d K e y ( [ E d i t l . T e x t ] ) then
ShowMessage ('non trouvé');
{FindKey r e c h e r c h e l'enregistrement qui contient d a n s le
champ Nom le contenu de Bditl}
l endf
' 4 . 7 . L e filtrage ( F i l t r e r une base de d o n n é e ) :
R e p r e n e z l ' e x e m p l e créé d a n s l e p a r a g r a p h e précédant, m e t t e z l a propriété
Active d e Table J à T r u e .
L e s propriétés d e TTable p e r m e t t a n t d e f i l t r e r u n e b a s e d e données s o n t :
• L a propriété F i l t e r e d q u i p e r m e t d e r e n d r e l e f i l t r e opérant. P l a c e z - l e à
True
• L a propriété F i l t e r ( d e t y p e S t r i n g ) q u i p e r m e t d e m e t t r e u n f i l t r e a f i n d e
n e p r e n d r e e n c o m p t e q u ' u n e p a r t i e d e l a b a s e d e données.
P a r e x e m p l e , d a n s l'inspecteur d'objet, affectez à la propriété Filter, la chaîne d e
caractère ' D * e t m e t t e z l a propriété Filtered à T r u e . V o u s n e v o y e z p l u s
7

dans le D B U r i d q u e les enregistrements dont le contenu d u champ N o m


c o m m e n c e p a r D. V o u s p o u v e z également u t i l i s e r d e s f i l t r e s d u t y p e
Nom='D*' o r Prenom= A*' X

• L a propriété F U t e r O p t i o n s p e r m e t d ' i n d i q u e r s i l ' o n v e u t t e n i r c o m p t e d e l a


c a s e ( m a j u s c u l e / m i n u s c u l e ) p o u r c e l a , d o u b l e c l i q u e z s u r l a propriété p u i s
m e t t e z à T r u e foCaselnsensitive. FUterOptions prend alors l a valeur
f foCaselnsensitive].
S i p a r e x e m p l e v o u s a v e z m i s d a n s l a propriété F i l t e r N o m = * d * ' , l e
D B G r i d vous affiche tous les enregistrements dont l e contenu d u champ
N o m c o m m e n c e p a r ' D ' o u p a r * d '.

Exercice d'application :
Créez u n e i n t e r f a c e a v e c l e s b o u t o n s s u i v a n t s :
• Rechercher : r e c h e r c h e r u n étudiant e n f o u r n i s s a n t s o n n o m .
• Pi/trer: afficher uniquement les étudiants dont le n o m
c o m m e n c e p a r "d'.
.r
• Trier : t r i e r l e s étudiants s e l o n l e n o m .
C e t t e a p p l i c a t i o n u t i l i s e l a b a s e d e données créée précédemment e t
a f f i c h e s e s e n r e g i s t r e m e n t s s u r u n DBGrid

Vous aimerez peut-être aussi