Delphi : TClientDataSet, TDataSetProvider et TTable

Je développe en Delphi depuis plusieurs années et je me suis remis à la base de données il y a peu.

Donc je fais un petit mémo expliquant ce que j’ai compris, en espérant que cela fera gagner du temps à ceux qui n’y arrivent pas, et en sautant les étapes de l’aide Delphi, qui, quoique très précise et détaillée, aurait tendance dans un premier temps à plus nous embrouiller qu’autre chose.

Dans une application « orientée base de données », il faut tout d’abord afficher les données. Il y a les composants de données, qui commencent tous par TDB (TDBGrid, TDBEdit, TDBMemo etc.). On prend le composant, on le dépose sur la fiche. On a une « DBGrid1 » qui s’affiche.

Ensuite, il faut aller chercher les données qu’on veut afficher. Une « source de données ». En Anglais, un composant « TDataSource ». On prend le composant, on le pose sur la fiche, on initialise la propriété « DataSource » de notre « DBGrid1 » à « DataSource1 ».

Ensuite, ce composant « source de données » doit aller chercher les données quelque part. Mais où ? Eh bien chez un « serveur de données ». Pour cela il nous faut un objet appelé le client. Ça peut paraitre bizarre, mais on l’appelle « client » parce que c’est lui qui ira demander des informations à un serveur de données. C’est le client de données du serveur de données. Donc un client d’ensemble de données, en Anglais : « TClientDataSet ». On prend un composant « TClientDataSet », on le pose sur la fiche, et on initialise la propriété « DataSet » de « DataSource1 » à « ClientDataSet1 ».

Ce fameux Client, lui, doit donc se connecter à un serveur de données. C’est intéréssant dans la mesure ou ce fameux serveur peut être « hors » de l’application, sur un autre ordinateur, mais faisons simple : on va supposer que ce serveur est directement intégré à l’application. On utilise donc un composant fournisseur de données, en Anglais : « TDataSetProvider ». On prend un composant « TDataSetProvider », on le pose sur la fiche, et on initialise la propriété « ProviderName » de « ClientDataSet1 » à « DataSetProvider1 ».

On y est presque !

Il reste le côté purement physique, c’est à dire l’objet réel qui ira lire les informations. Nous allons prendre un objet TTable. (Il y a les objet TIBTable pour Interbase, TMyTable pour MySQL, TSQLTable pour dbExpress, bref, plein de tables dont on se sert de la même manière que TTable). On prend un composant « TTable, on le pose sur la fiche, et on initialise la propriété « DataSet » de « DataSetProvider1 » à « Table1 ».

Voilà l’image résultat :
Résultat Delphi TClientDataSet, TDataSetProvider, et TTable

Voilà le trajet des informations :

Lorsque la grille de données voudra lire des informations pour les afficher, la demande suivra ce trajet :

DBGrid1 => DataSource1 => ClientDataSet1 => DataSetProvider1 => Table1

et la Table ira lire les bonnes informations, et créera une réponse. La réponse fera le trajet inverse :

Table1 => DataSetProvider1 => ClientDataSet1 => DataSource1 => DBGrid1

L’intérêt d’avoir autant de composants c’est qu’on peut faire deux applications : le client qui affiche les données, et le serveur, qu’on peut mettre sur un autre ordinateur.

Il est possible de « couper » directement la route et de ne faire qu’un lien direct entre DataSource1 et Table1. (Le propriété DataSource1.DataSet = « Table1 »). Mais ce ne sera pas du tout évolutif. A éviter donc.

One comment

Poster un commentaire

Vous devriez utiliser le HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>