Unité de type Data Module

chris37

Il existe une unité très pratique permettant de regrouper des composants non graphiques, des classes et des procédures. Il s'agit du Data Module.

La principale fonction de cette unité est la centralisation d'objets communs à une ou plusieurs applications. Par exemple : composant de connexion à la base de données, images, menus, procédures globales, etc.

Il est même conseillé d'avoir plusieurs Datamodules pour les grosses applications : connexion, gestion des stocks, achats, export, etc.

L'avantage est la mutualisation des objets.

Commentez ♪

- Titre : Unité de type Data Module

- Auteur : chris37

- Parution : 4 novembre 2008

- Mise à jour : 20 octobre 2010

- Licence : Copyright ® 2008-2010 chris37. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Mise en place

- Versions de Lazarus antérieures à 0.9.26

- Conclusion

Mise en place

Cette unité se comporte un peu comme une fiche.
Cliquez sur Nouveau. Dans la liste Files, choisissez Datamodule.

Une fiche apparaît à l'écran avec un fond blanc.
Cette unité est ajoutée automatiquement au projet en cours et créée directement dans le code du projet. Bien sûr, il est possible de l'enlever de la liste des objets créés automatiquement pour ne créer le Datamodule que lorsque nécessaire de la même façon que pour une Form (voir dans les Options du projet/Onglet Fiches).

Imaginons le datamodule TDmdDb et créons-le dynamiquement s'il ne l'est pas automatiquement.

procedure maprocedure;
var
mondatamodule : TDmdDb
Begin
mondatamodule := TDmdDb.Create(self)
End;

À partir de là, tous les objets déposés sur le Datamodule sont accessibles par

mondatamodule.Momobjet

à condition d'avoir ajouté dans la section Uses de votre unité appelante le nom de l'unité contenant le Datamodule (toujours le même principe que pour une Form).

Vous pouvez déposer tous types de composants non graphiques sur un Datamodule.
Voilà ! C'est aussi simple que cela et ça rend de grands services.

Versions de Lazarus antérieures à 0.9.26

Il existe une petite contrainte avec les versions de Lazarus inférieures à 0.9.26 concernant l'utilisation des Datamodules mais cela n'est absolument pas gênant pour développer.

En effet, malgré le fait d'avoir mis à jour le uses de la form avec le nom de l'unité du datamodule, les objets contenus dans le Datamodule ne sont pas visibles depuis l'inspecteur d'objet des composants de la form, contrairement à Delphi.

Explication

Si la form utilise le Datamodule mondatamodule qui, lui, contient un composant TSqlquery,
Si la form contient un TDatasource,
Alors, lorsque l'on cliquera dans l'inspecteur d'objet pour sélectionner le Dataset à utiliser pour le TDatasource de la form, le TSqlquery ne s'affichera pas dans liste déroulante.

En attendant, procédez comme cela : par exemple, initialisez la propriété Dataset d'un TDatasource d'une form à un TSqlquery placé dans un Datamodule.

form1.momdatasource.dataset := mondatamodule.Sqlquery1

Cela est corrigé à partir de la version 0.9.26.

Conclusion

Compliqué ? Non bien sûr. Alors à vos claviers et vos applications seront mieux structurées.