Вы находитесь на странице: 1из 12

Manipulation et Cration des Bases de Donnes

avec C++ Builder

1 Mise en place de la base de donnes :


Un alias de base de donnes est un identificateur unique permettant daccder une base de donnes
exploitable avec C++ Builder. Celle-ci peut tre de plusieurs types en fonction des drivers installs sur
votre systme :
- Une base de donnes Access.
- Une base de donnes SQL au format Interbase.
- Un lien SQL vers un serveur Oracle, Sybase, DB2, SQL Server etc.
- Un rpertoire regroupant des fichiers DBASE ou PARADOX.
La cration dun alias se fait trs simplement avec un outil nomm soit Administrateur BDE . A
titre dexemple, nous crons un alias pour lensemble de fichiers au format Paradox situs dans le
rpertoire C:\Program Files (x86)\Common Files\Borland Shared\DATA, alias que
nous nommerons TPBD.
1.1 Loutil Administrateur BDE :
Ladministrateur BDE est un outil la fois trs simple et trs complet. Il est capable dafficher soit
lensemble des alias dj prsents (slectionnez longlet Bases de donnes) soit des informations
concernant le systme telles que lensemble des formats de bases de donnes disponibles ou le format des
nombres (longlet Configuration ).
La fentre principale de ladministrateur BDE se dcompose en deux volets :
- Dans le volet de gauche, vous slectionnez un objet (un alias de bases de donnes).
- Dans le volet de droite, vous obtenez la liste de ses caractristiques.

Figure : Ladministrateur BDE en mode configuration


1.2 Cration de lalias :
La dmarche suivre est la suivante :
1. Lancement de lutilitaire Administrateur BDE (C:\Program Files (x86)\Common Files\Borland
Shared\BDE\bdeadmin).
2. Slection de longlet Bases de donnes .
3. Pour crer un nouvel alias, slectionnez le menu Objet Nouveau.

4. Il faut ensuite slectionner le type de bases de donnes. Pour notre exemple, choisissez
STANDARD, ce qui correspond un ensemble de fichiers DBASE ou Paradox.

Cette opration est illustre sur la figure suivante :

Figure Slection du type de la base de donnes


Une fois le type choisi, il vous reste remplir diverses rubriques concernant votre nouvelle base,
comme le montre la figure suivante :

Figure Slection du nom de lalias et du chemin des donnes


Vous devez renseigner absolument :
. Le nom de lalias (le nom par dfaut est pouvantable)
. Le chemin des donnes
Finalement, il vous reste valider en activant la flche bleue. Une bote de dialogue vous demande
alors de confirmer. A partir de ce moment l, votre base de donnes est accessible via C++ Builder.

2 Accs aux donnes dans C++ Builder :


La premire chose faire est, bien entendu, de crer un projet C++ Builder. Ensuite, il faut savoir que
C++ Builder effectue une sgrgation forte entre les composants qui reprsentent les donnes en tant que
document et les lments visuels (ou dinterface) qui permettent lutilisateur de les manipuler.
Il est prfrable de toujours regrouper les lments daccs aux donnes qui sont des composants non
visuels dans une unit spcialise connue sous le nom de Module de Donnes. Celui-ci est cr par la
commande Fichier nouveau module de donnes et se manipule ensuite comme une fiche / unit
standard.
A titre dexemple, nous choisissons trois tables :
empolyee.db regroupe les donnes relatives aux employs.
consumer.db contient les donnes dcrivant les consommateurs.
animals.db contient les donnes dcrivant les animaux.
La premire chose faire consiste associer un composant TTable chacune de ces tables. Pour
ceci, nous choisissons un composant TTable dans la palette BDE que nous collons dans le module
de donnes ou sur la fiche. Linspecteur dobjets permet ensuite de lassocier un alias de base de
donnes (champ Database name) puis une table (Table name). Il est recommand de donner ce
composant un nom en rapport avec celui de la table. Dans cet exemple, nous choisirons
TableEmployes, TableConsommateur et TableAnimaux. A ce moment, il est possible
douvrir la table en armant le flag active dans linspecteur de donnes.
La figure suivante illustre un composant TTable plac sur un module de donnes.

Figure Premire tape de la cration dun composant TTable : slection dun alias de base de
donnes
Les principales proprits de TTable sont les suivants :
- DatabaseName : nom de lalias de base de donnes ou du composant TDatabase spcifiant la
base de donnes au sein de laquelle nous allons pcher une table. Cette proprit est commune
TTable, TQuery.
- TableName : nom de la table reprsente par le composant. Une fois la proprit DatabaseName
renseigne, vous pouvez choisir le nom de la table dans une liste droulante.
- IndexName : nom de lindex actif sur la table. Par dfaut, cest--dire si le champ est vide, il sagit
de la clef primaire. Vous avez la possibilit de slectionner un index dans une liste droulante une fois la
proprit TableName fixe.

- Active : ce champ indique si la table est ouverte ou non. Vous ne pouvez le basculer true
quune fois les champs DatabaseName et TableName renseigns. En outre, Il faut savoir que toute
modification sur la structure de la table entrane irrmdiablement le passage de la proprit false.
- FieldDefs contient la dfinition de chacun des champs de donnes de la table.
Il est possible dinclure dautres composants non visuels dans un module de donnes. Nous citerons en
particulier :
Des composants reprsentatifs dune base de donnes (TDatabase). Ceux-ci permettent dintercaler
une couche supplmentaire entre les tables (ou les requtes) et les alias de bases de donnes. En effet, si
vous disposez de plusieurs bases partageant la mme structure et que vous souhaitez pouvoir utiliser votre
code avec lune ou lautre indiffremment, il est possible dutiliser une variable TDatabase qui
pointera sur le bon alias. Les TTable ou TQuery peuvent alors rfrencer ce composant dans leur
proprit DatabaseName.
Des sources de donnes de type TDataSource. Ces composants (non visuels) tablissent le lien
entre les ensembles de donnes (Tables ou Requtes) i.e. la partie Document du modle C++ Builder avec
les composants visuels chargs de permettre la manipulation des bases de donnes i.e. la partie
Visualisation du modle C++ Builder.
Bien que ce ne soit pas requis, il est prfrable de placer les TDataSource (ou sources de donnes)
dans le module de donnes. Il est possible davoir plusieurs sources de donnes pour le mme ensemble
de donnes. On dispose ainsi de plusieurs visualisations sur un mme document.
La proprit la plus importante des composants TDataSource est DataSet. En effet celle-ci
indique sur quel ensemble travaille la source de donnes. Vous pouvez spcifier dans cette proprit tout
composant hritant de TDataSet, cest dire (pour ce qui concerne les composants de base) TTable
et TQuery.

Figure Les composants TDataSource


Cration dune requte SQL laide de composant TQuery :
La proprit SQL est la partie la plus importante de TQuery .Vous pouvez accder cette proprit par
l'inspecteur d'objets ou par un programme d'excution.

Il est prfrable daccder la proprit SQL par la programmation afin de modifier dynamiquement
l'tat associ une requte. Par exemple, si vous voulez mettre trois instructions SQL, il n'est pas
ncessaire de placer trois composants TQuery sur votre fiche. Au lieu de cela, il suffit de placer un
TQuery sur la fiche et simplement changer sa proprit SQL trois fois.
Lorsque vous utilisez un programme pour un TQuery, d'abord, vous devez fermer la requte en cours,
et videz les chanes qui peuvent tre rsident dj dans la proprit SQL par les deux instructions
suivante:
Query1-> Close ();
Query1-> SQL-> Clear ();
L'tape suivante consiste ajouter les nouvelles chanes que vous souhaitez excuter:
Query1-> SQL-> Add ("Select * from TableAnimaux ");
Query1-> Open ();
Notez que la commande Open () est ncessaire quand vous voulez retourner les lignes d'une table.
Chaque fois que vous voulez changer une instruction SQL, vous pouvez tout simplement passer par le
processus dcrit prcdemment (fermer la requte courante, leffacer, et passer une nouvelle chane
la proprit SQL).

3 Les contrles orients bases de donnes :


On retrouve ainsi, par exemple, des botes ddition, des listes ou des boutons radio orients bases de
donnes. Le contrle le plus important est nanmoins celui qui permet de prsenter une table ou le rsultat
dune requte sous forme tabulaire : TDBGrid. Tous ces composants se trouvent dans la palette
Contrle BD .
Les contrles orients bases de donnes se placent sur les fiches et non pas sur le module de donnes :
ils constituent la partie interface du modle Document / Visualisation de C++ Builder.
Tous sont relis aux composants non visuels via les sources de donnes. Afin daccder ces
dernires, il ne faut pas oublier dinclure lentte du module de bases de donnes dans la fiche de
prsentation (Fichier Inclure lentte dunit).

3.1 Prsentation tabulaire dune table ou dune requte


Nous donnons ici lexemple de prsentation dune table mais ce qui suit sapplique tout composant
de type TDataSet, une requte par exemple. Le composant TDBGrid prsente les donnes sous leur
forme la plus naturelle celle dun tableau o chaque colonne correspond un champ et chaque ligne un
tuple.
Voici la marche suivre pour crer une reprsentation dun TDataSet (table ou requte) :
Placer un composant TDBGrid sur la fiche.
Associer sa proprit DataSource une source de donnes prsente dans le module de donnes (il
sera sans doute ncessaire dinclure le fichier dentte crer un lien uses depuis le module de donnes vers
la fiche de prsentation laide du menu Fichier Inclure lentte dunit ).

Aussitt cette dernire opration ralise, la grille se remplit des donnes prsentes dans la relation. Si
rien ne se passe, il faut vrifier la proprit Active de la relation que lon souhaite prsenter. Le
tableau cr compte autant de colonnes que de champs dans la relation et autant de lignes que de tuples.
Chaque colonne possde un titre dont la valeur est prdfinie au titre du champ. La figure suivante illustre
le composant TDBGrid.

Figure Prsentation tabulaire des donnes dans un composant TDBGrid


La proprit la plus importante dune TDBGrid est Columns qui est principalement constitue dun
tableau de TColumn dont chaque lment est reprsentatif dune colonne du tableau.
A sa cration, un composant TDBGrid est dot de colonnes dynamiques, cest dire de lensemble des
champs de la table avec les formats prdfinis. Il est toutefois possible de crer des colonnes statiques
permettant entre autre des prsentations plus sophistiques des donnes. Toutefois, il faut garder
lesprit que les colonnes dynamiques bougent avec lensemble de donnes. En particulier, si vous
ajoutez de nouveaux champs (ou si vous en supprimez), les colonnes dynamiques suivront cette
progression alors quil vous faudra modifier les colonnes statiques.
Le meilleur moyen de crer des colonnes statiques consiste double cliquer sur la grille pour faire
apparatre la liste des colonnes statiques (initialement vide). Ensuite, on gagnera activer Tous les
champs pour ajouter la listes des colonnes statiques lensemble de champs actuellement prsents dans
la Table.
Les diffrents boutons de la fentre des colonnes statiques permettent de changer lordre des colonnes,
de supprimer celles que lon veut exclure de laffichage, ou bien dajouter de nouvelles colonnes si lon a
touch la structure de la table (ou de la requte) ou si lon a prcdemment supprim une colonne par
inadvertance.
Une fois la liste des colonnes statiques cre, il est possible de manipuler chaque colonne dans
linspecteur dobjets comme le montre la figure suivante.

Figure Manipulation des colonnes


La proprit Title est trs complexe et comprend tout ce qui est ncessaire la manipulation dun
titre, y compris une proprit Font permettant de spcifier un style de caractres diffrent de celui de la
colonne. En particulier, il est possible daligner diffremment les donnes de la colonne et leur titre ou de
choisir une fonte diffrente.
Initialement, le champ Title reprend le nom du champ de donnes, il est tout fait possible de le
modifier. A titre dexercice, changez le titre des colonnes de manire ce quil reprenne le nom du champ
mais en gras et en minuscules.

3.2 Les autres contrles :


Les autres contrles permettent essentiellement de modifier ou dajouter de nouveaux lments dans la
base de donnes. Par exemple, les composants liste orients bases de donnes autorisent lutilisateur
changer la valeur dun champ dans un tuple existant ou en cours de cration.
Les composants navigateur ou TDBNavigator permettent un utilisateur de se dplacer dans un
ensemble de donnes et dy effectuer des modifications si ceci est possible en associant sa proprit
DataSource une source de donnes dune table. Sous sa forme la plus complte, ce composant se
prsente ainsi :

4. Le filtrage :
Le filtrage est une opration qui permet de restreindre les tuples dune table ceux qui respectent une
certaine condition nomme Filtre. Pour activer un filtre, il faut spcifier dans la proprit Filter
(composant TTable) une chane de caractres spcifiant les critres de filtrage et positionner la
proprit Filtered true. Ces proprits tant modifiables tout instant, cette opration pourra
seffectuer trs facilement et sous le contrle dlments dinterface.

5. Utilisation du Module de Bases de Donnes :


Cest un utilitaire trs pratique fourni en standard avec les outils de dveloppement (menu Tools\
Database Desktop). Il permet de crer des tables avec leurs index ventuels et mme, dans certains cas, de
gnrer des contraintes dintgrit rfrentielle.

5.1 Prsentation de linterface :


Cest assurment la fonctionnalit la plus utilise du MDD. En effet, elle permet de crer les tables sur
lesquelles on veut travailler, fonctionnalit que C++ Builder nest pas capable de raliser sans
programmation.
La cration est lance par le menu Fichier Table Nouveau
La premire tape consiste slectionner le type de table dans la bote combo qui apparat lcran
(voir la figure suivante). Si la portabilit des donnes nest pas votre proccupation premire, je vous
conseille le format Paradox 7 pour lequel BDE (Borland Database Engine, le moteur de bases de donnes
de C++ Builder) est optimis.

Figure Liste des formats disponibles en cration de table


Une fois le type de table slectionn, le MDD vous affiche sa fentre principale telle quelle est
prsente par la figure suivante :

Cette fentre se divise en deux grandes parties. A gauche, vous avez la liste des champs de la table,
dans leur ordre de stockage, accompagns de leur type, de la taille si elle sapplique ainsi que dune

colonne nomme Index et occupe par une toile si le champ fait partie de la clef primaire. La partie
droite est plus versatile et dpend de loption choisie. La figure suivante regroupe les diffrentes
rubriques accessibles auxquelles il faut rajouter Langage de Table .

Figure liste des options disponibles

Les rubriques les plus utilises sont :


- Contrles de validit : permet de spcifier des contraintes sur lattribut, en particulier, impos
que sa valeur soit instancie. Il est galement possible de fournir des valeurs extrmes pour les
attributs.
- Index secondaires : permet dajouter des index secondaires sur la table.
- Intgrit rfrentielle : permet de fixer des contraintes dintgrit rfrentielle entre deux tables.
Pour rsumer, la valeur dun champ dans une table B doit correspondre une valeur existante de
la clef primaire dune autre table A.

5.2 Ajout de champs


Lajout de champs se fait tout simplement en renseignant les rubriques de la partie gauche de la
fentre, cest dire, dans lordre : le nom, le type, ventuellement la taille pour finir par la prsence dans
la clef primaire.
5.2.1 Le nom
La premire donne saisir concerne le nom du champ. Les conventions de nommage dpendent du
type de table que vous avez choisi. En rgle gnrale, et mme si certains systmes le permettent, il vaut
mieux ne pas utiliser despaces dans le nom dun champ.
5.2.2 Le type
La figure suivante montre les diffrents types de donnes disponibles pour les tables de type Paradox
7. Cette liste sobtient en tapant espace dans la case rserve au type des donnes.

Figure Types de donnes disponibles


La plupart des types de donnes prsents ne pose aucun problme. Je voudrai toutefois revenir sur les
suivants :
- Incrmentation auto : la valeur de ce champ est calcule automatiquement partir de la dernire
valeur prsente dans la table. Aussi, vous navez pas la possibilit de la fixer vous mme. Ce type
est parfait pour crer des clefs primaires numriques si la structure de votre table nadmet pas de
clef primaire naturelle.
- Mmo / Mmo Format / Binaire / Graphique ces diffrents types sont destins stocker des
quantits importantes de donnes. Contrairement aux autres champs, ils ne sont pas stocks leur
place dans la table mais tous ensemble, soit dans un fichier spar, soit tout la fin du fichier.
Leur accs est ainsi soumis des rgles prcises.
5.2.3 La taille :
Certaines donnes, telle que les chanes de caractres et les donnes numriques en virgule fixe
ncessitent une taille. Elle se prsente soit sous la forme dun entier, soit dune paire dentiers (taille et
prcision pour les rels en virgule fixe).
5.2.4 La prsence dans la clef primaire :
Si vous souhaitez quun champ soit prsent dans la clef primaire, il faut saisir une toile dans la
dernire colonne de la fentre comme prsent par la figure suivante. Bien entendu, il est possible de faire
figurer plusieurs champs dans la clef primaire.

Figure la case Index

5.5 Dfinir des index secondaires


Les index secondaires permettent daccder trs rapidement aux donnes en fonction dun certain
critre sur les donnes. La figure suivante montre laspect de la fentre du MDD lorsque lon slectionne
Index secondaires dans les options.

Figure la liste des index secondaires


La liste sur la droite indique quels index secondaires sont dj disponibles. Il est possible dajouter des
index, de modifier ou de supprimer les index dj existants. La fentre suivante est associe aux
oprations dajout ou de modification dindex secondaire.

Figure Dfinition des index secondaires


Les champs apparaissant en gris dans la liste de gauche sont dj inclus dans lindex et ne peuvent
donc plus y tre ajouts.
Lorsque lon spcifie plusieurs champs dans un index, celui-ci est multicritres hirarchique. Les
tuples sont ordonns dabord en fonction du premier champ, puis, pour chaque valeur du premier champ,
en fonction du second, puis pour chaque valeur identique du couple (premier champ, second champ) en
fonction du troisime et ainsi de suite.
Les options de cette fentre sont trs simples comprendre :
Unique : spcifie que cest un index sans collision : pour une mme valeur dindex, il ne peut y avoir
quun seul tuple
Maintenu : indique que lindex est mis jour chaque opration sur la table. Ceci peut savrer coteux
si de nombreuses oprations sont effectues mais garantit les meilleurs temps daccs aux donnes.
Dcroissant : par dfaut, les tuples sont rangs par ordre croissant sur lindex.

Diffrence MAJ/min : introduit une diffrenciation des mots selon la casse. Rappelons que les
Majuscules sont alors prioritaires par rapport aux minuscules (dans lordre croissant)

Вам также может понравиться