• Aucun résultat trouvé

Gérer la base de données

Dans le document [PDF] Document complet Delphi pdf (Page 160-162)

F. TP 6-7 : Bases de données sous Delphi 3

5. Gérer la base de données

Vous trouverez dans la page « AccèsBD » de la palette de composants 3 icones : 1- une pour les bases de données ‘Database’

2- une pour les tables (Paradox ou dBase) ‘Table’ 3- une pour les requêtes SQL ‘Query ‘

Référencer une table :

Déposer le composant ‘Table’ dans la fiche et initialiser ses propriétés ‘DatabaseName’ à l’alias du répertoire au ce situe votre base et ‘TableName’ au nom de la base.

Composant Table possède les méthodes simples First, Last, Next, Prior et MoveBy permettant de se déplacer dans la table tandis que BOF et EOF permettent de déterminer la position du curseur (enregistrement courant) au début ou à la fin du fichier. La propriété Fiels et la méthode FieldByName servent à accéder aux champs.

Utiliser un index

Les propriétés IndexFieldNames et IndexNale des ‘Table’ servent à définir un index à la table en question (elle doit être non active) correspondant à un champ donné de la table, soit à un index défini pour la table.

Il nous suffit de référencer la propriété ‘IndexName’ par ‘NOMPRENOM’ l’index de notre table. Afficher une table

Utilisez une grille de base de données (DBGrid) dans le panel « ContrôleBD ». Nous allons lui accorder toute la zone cliente et lui enlever sa bordure.

Faire le lien entre le deux

Il nous reste à faire le lien entre la table et son affichage. A cet effet, il existe un composant reliant n’importe quel composant de base de données à n’importe quel composant d’affichage.

Ce composant s’appelle ‘DataSource’ et il est situé dans la page « AccèsBD ».

Il suffit de préciser que son ‘DataSet’ est ‘Table1’ qui est visible lorsque vous afficher les valeurs possibles par le boutons de descente.

Concernant la grille, vous devez préciser que sa ‘DataSource’ est ‘DataSource1’. Visualiser le résultat à la construction

Il suffit d’activer la table en changeant sa propriété ‘Active’ à ‘True’. Vous obtenez alors ce qui suit :

Gérer la base du programme

Nous allons manipuler quelque peu la base afin de répondre aux commandes du sous menu ‘Personne’.

Commande Code

Ajouter Table1.Append

‘Enlever’ Table1.Delete

Tous les ensembles de données possèdent ces méthodes qui permettent de manipuler leurs données. Une barre d’outils pour les bases de données

Nous allons maintenant placer une barre d’outils qui permet de se déplacer parmi les enregistrements, d’en ajouter, d’en enlever, d’annuler ou de confirmer une modification.

Il suffit de placer dans un volet le composant navigateur de bases de données (DBNavigator) et de le relier aux informations en donnant la valeur ‘DataSource1’ à sa propriété ‘DataSource’.

Pour visualiser les conseils qui lui sont propres mettez la propriété ‘ShowHints’ à vrai. Changer de table pour le même composant

Nous allons maintenant implémenter les commandes classiques de sous menu. Commande ‘Ouvrir…’ :

Il nous faut tout d’abord une boîte de dialogue d’ouverture des fichiers que nous déposerons dans la fiche avec un filtre (Filter) « Répertoires|*.DBF », l’extension par défaut (DefaultExt) « DBF » et la vérification de l’existence du fichier (option ‘ofPathMustExist’ et ‘ofFileMustExist’ à vrai).

Avant d’affecter un fichier au composant table, il faut s’assurer que celui-ci n’est pas actif. Nous allons donc mettre la table à non active.

Voici le code : if OpenDialog1.Execute then begin with Table1 do begin Active := False; DatabaseName := ExtractFilePath(OpenDialog1.FileName); TableName := ExtractFileName(OpenDialog1.FileName); Active := True; end;

Commande ‘Enregistrer sous…’ :

Déposons une boîte de dialogue d’enregistrement avec les mêmes filtre et extension que la boîte d’ouverture et les option suivante à vrai : ‘ofOverWritePrompt’ et ‘ofHideReadOnly’.

Il nous faut aussi un composant spécifique aux opérations en masse sur les données : ‘BatchMove’ (« AccèsBD »). Ce composant sert à effectuer des opérations générales entre deux tables (copie, mise à jour, effacement …). Pour cela, il existe deux propriétés référençant des tables Source et Destination, et la propriété Mode indiquant l’opération à effectuer.

Nous allons donc déposer ce composant ce composant dans la fiche et lier ‘Table1’ à la source. Nous préciserons (batCopy) dans la propriété ‘Mode’. Il va nous falloir un seconde ‘Table’ dans laquelle nous copierons la première, qui sera reliée à la propriété ‘Destination’ du composant Action groupée (BatchMove). Enfin, il ne reste plus qu’à réaliser le lien entre le ‘BatchMove’ et le menu en définissant une méthode de réaction à la commande ‘Enregistrer sous…’

if SaveDialog1.Execute then with Table2 do begin Table2.DatabaseName := ExtractFilePath(SaveDialog1.FileName); Table2.TableName := ExtractFileName(SaveDialog1.FileName); BatchMove1.Execute; end; end;

Création d’une table

Nous commencerons par demander à l’utilisateur le nom du fichier qui sera créé par la boîte de dialogue d’enregistrement qui existe déjà dans notre fiche pour initialiser les propriétés ‘DatabaseName’ et ‘TableName’ de ‘Table2’. Nous

recopierons ensuite la structure de la table1 dans la table2 et nous créerons la table correspondante au composant ‘Table2’. Il nous restera à ouvrir la table1 avec le fichier créer :

procedure TForm1.Nouveau1Click(Sender: TObject); begin

SaveDialog1.Title := 'Créer un répertoire dans'; if SaveDialog1.Execute then

with Table2 do begin

DatabaseName := ExtractFilePath(SaveDialog1.FileName); TableName := ExtractFileName(SaveDialog1.FileName); { Création de la nouvelle table }

FieldDefs := Table1.FieldDefs; IndexDefs.Clear;

CreateTable; end;

Delphi et Kylix 162 L. Jourdan Table1.DatabaseName := Table2.DatabaseName; Table1.TableName := Table2.TableName; Table1.Active := True; end; Amélioration : Recherche

Nous allons implémenter une recherche sur le nom dans le répertoire. Ajouter la commande ‘Personne|Rechercher…’ et le composant dialogue de recherche (FinDialog) de la page « Dialogues » du panneau des composants.

Nous mettons ses options ‘frHideMatchCase’, ‘frHideWholeWord’ et ‘frHideUpDown’ à vrai pour limiter la boîte à la chaîne de caractère à rechercher.

1- réagir à l’exécution de la boîte FindDialog1.Execute 2- réagir à l’évenement ‘OnFind’ de la boîte :

with Table1 do begin SetKey; Fields[0].AsString := FindDialog1.FindText; GotoKey; end;

La méthode SetKey du composant ‘Table’ sert à préciser la propriété ‘Fields’ et la méthode ‘FieldByName’ seront utiliser pour définir non pas les valeurs des champs de l’enregistrement courant mais les valeurs à rechercher.

La méthode GotoKey sert ensuite à effectuer cette recherche. La propriété ‘Fields’ et la méthode ‘FielsByName’ reprennent ensuite leur rôle normal.

Réalisation d’une messagerie

Vous allez créer une application de messagerie qui utilise plusieurs tables. Trois tables :

- une pour représenter les clients

- une pour les personnes que l’on contacte chez les clients (« contacts ») - une pour les appels téléphoniques

Dans le document [PDF] Document complet Delphi pdf (Page 160-162)