Ajouter un module de données (tutoriel général IBX)
Remonter à Tutoriel : Utilisation de InterBase Express pour accéder à une base de données
Dans cette section, vous allez créer un module de données (TDataModule), c'est-à-dire une fiche qui contient des composants non visuels que votre application utilise.
Voici une vue du TDataModule entièrement rempli :
Après avoir créé un TDataModule, vous pouvez utiliser le module de données dans d'autres fiches.
Sommaire
Ajouter le TDataModule
Pour ajouter le module de données à votre projet, cliquez avec le bouton droit sur le nom du projet dans le Gestionnaire de projets, puis cliquez sur Ajouter nouveau > Autre... pour afficher la boîte de dialogue Nouveaux éléments.
Delphi
Sélectionnez Module de données et cliquez sur OK.
Sélectionnez le nouveau TDataModule. Définissez sa propriété Name sur "DmEmployee". Définissez OldCreateOrder sur true.
Enregistrez la nouvelle unité :
- Pour Delphi, enregistrez l'unité dans DmCSDemo.pas.
Ajoutez maintenant des composants dans le nouveau TDataModule.
Ajouter une base de données et une transaction
Ajoutez deux composants de base de données fondamentaux : le TIBDatabase et le TIBTransaction.
- Comme dans la section Visualiser diverses tables, faites glisser un TIBDatabase sur le module de données. Double-cliquez sur le nouveau TIBDatabase pour afficher l'éditeur de composants de base de données. Définissez les propriétés du TIBDatabase en remplissant la boîte de dialogue puis en cliquant sur OK :
Remarque : Si vous incorporez le mot de passe dans l'application, comme c'est le cas dans cet exemple, tout utilisateur a accès à cette base de données sans se connecter.
- Terminez la configuration du TIBDatabase en définissant la propriété Name sur "EmployeeDatabase". Définissez Connected sur true.
- Ajoutez un TIBTransaction au TDataModule. Définissez la propriété DefaultTransaction du TIBDatabase sur "IBTransaction1".
Ajouter des procédures stockées
Ajoutez deux composants TIBStoredProc pour utiliser les procédures stockées de la base de données.
- Placez un TIBStoredProc sur le module. Définissez Name sur "ShipOrderProc". Définissez Database sur "EmployeeDatabase" depuis le menu déroulant. Définissez StoredProcName sur "SHIP_ORDER" depuis le menu déroulant. SHIP_ORDER est l'une des procédures stockées de la base de données EMPLOYEE.
- Ajoutez un autre TIBStoredProc au module. Définissez Name sur "DeleteEmployeeProc". Définissez Database sur "EmployeeDatabase" depuis le menu déroulant. Définissez StoredProcName sur "DELETE_EMPLOYEE" depuis le menu déroulant.
Ajouter des ensembles de données
Ajoutez cinq composants TIBDataSet au module. Chaque TIBDataSet accède à une table différente de la base de données EMPLOYEE, ou accède à la table d'une autre façon.
- TIBDataSet "EmployeeLookup"
- Définissez la propriété Transaction sur "IBTransaction1". Cette définition a peut être déjà été effectuée.
- Connectez ce composant TIBDataSet à la base de données en définissant sa propriété Database sur "EmployeeDatabase" à l'aide du menu déroulant.
- Définissez la propriété Name sur "EmployeeLookup".
- Cliquez avec le bouton droit le TIBDataSet "EmployeeLookup" et sélectionnez Modifier SQL.
- Définissez la propriété CommandText sur
select * from EMPLOYEE
. - Double-cliquez sur le composant TIBDataSet pour afficher la boîte de dialogue Editeur de champs. Cliquez avec le bouton droit sur la liste vide et sélectionnez Ajouter tous les champs dans le menu contextuel. Fermez l'éditeur de champs.
- Cliquez avec le bouton droit sur le TIBDataSet "EmployeeLookup" et sélectionnez Editeur d'ensemble de données.
- Sélectionnez "EMP_NO" dans la colonne Champs clé et cliquez sur le bouton Générer SQL.
- Cliquez sur le bouton OK pour fermer l'expert.
- Vous pouvez utiliser ce composant pour accéder à la table EMPLOYEE de la base de données.
- TIBDataSet "SalesTable"
- Définissez la propriété Transaction sur "IBTransaction1".
- Définissez la propriété Database sur "EmployeeDatabase" depuis le menu déroulant.
- Définissez la propriété Name sur "SalesTable".
- Cliquez avec le bouton droit sur le TIBDataSet "SalesTable" et sélectionnez Modifier SQL.
- Définissez la propriété CommandText sur
select * from SALES
. - Double-cliquez sur le composant TIBDataSet pour afficher la boîte de dialogue Editeur de champs. Cliquez avec le bouton droit sur la liste vide et sélectionnez Ajouter tous les champs dans le menu contextuel. Fermez l'éditeur de champs.
- Cliquez avec le bouton droit sur le TIBDataSet "SalesTable" et sélectionnez Editeur d'ensemble de données.
- Sélectionnez "PO_NUMBER" dans la colonne Champs clé et cliquez sur le bouton Générer SQL.
- Cliquez sur le bouton OK pour fermer l'expert.
- Vous pouvez utiliser ce composant pour accéder à la table SALES de la base de données.
- TIBDataSet "CustomerTable"
- Définissez la propriété Transaction sur "IBTransaction1".
- Définissez la propriété Database sur "EmployeeDatabase" depuis le menu déroulant.
- Définissez la propriété Name sur "CustomerTable".
- Cliquez avec le bouton droit sur le TIBDataSet "CustomerTable" et sélectionnez Modifier SQL.
- Définissez la propriété CommandText sur
select * from CUSTOMER WHERE CUST_NO = :CUST_NO
. - Double-cliquez sur le composant TIBDataSet pour afficher la boîte de dialogue Editeur de champs. Cliquez avec le bouton droit sur la liste vide et sélectionnez Ajouter tous les champs dans le menu contextuel. Fermez l'éditeur de champs.
- Cliquez avec le bouton droit sur le TIBDataSet "CustomerTable" et sélectionnez Editeur d'ensemble de données.
- Sélectionnez "CUST_NO" dans la colonne Champs clé et cliquez sur le bouton Générer SQL.
- Cliquez sur le bouton OK pour fermer l'expert.
- Vous pouvez utiliser ce composant pour accéder à la table CUSTOMER de la base de données.
- TIBDataSet "EmployeeTable"
- Définissez la propriété Transaction sur "IBTransaction1".
- Définissez la propriété Database sur "EmployeeDatabase" depuis le menu déroulant.
- Définissez la propriété Name sur "EmployeeTable".
- Cliquez avec le bouton droit sur TIBDataSet "EmployeeTable" et sélectionnez Modifier SQL.
- Définissez la propriété CommandText sur
select * from EMPLOYEE
. - Cliquez avec le bouton droit sur TIBDataSet "EmployeeTable" et sélectionnez Editeur d'ensemble de données.
- Sélectionnez "EMP_NO" dans la colonne Champs clé et cliquez sur le bouton Générer SQL.
- Cliquez sur le bouton OK pour fermer l'expert.
- Vous pouvez aussi utiliser ce composant pour accéder à la table EMPLOYEE de la base de données.
- TIBDataSet "SalaryHistoryTable"
- Définissez la propriété Transaction sur "IBTransaction1".
- Définissez la propriété Database sur "EmployeeDatabase" depuis le menu déroulant.
- Définissez la propriété Name sur "SalaryHistoryTable".
- Cliquez avec le bouton droit sur TIBDataSet "SalaryHistoryTable" et sélectionnez Modifier SQL.
- Définissez la propriété CommandText sur
select * from SALARY_HISTORY WHERE EMP_NO=:EMP_NO
. - Cliquez avec le bouton droit sur TIBDataSet "SalaryHistoryTable" et sélectionnez Editeur d'ensemble de données.
- Sélectionnez "EMP_NO" dans la colonne Champs clé et cliquez sur le bouton Générer SQL.
- Cliquez sur le bouton OK pour fermer l'expert.
- Vous pouvez aussi utiliser ce composant pour accéder à la table SALARY_HISTORY de la base de données.
Ajouter des sources de données
Ajoutez quatre composants TDataSource au module. Les TDataSource sont liés aux TIBDataSet ci-dessus. Un composant TDataSource sert d'interface entre l'ensemble de données TIBDataSet et les contrôles orientés données.
- TDataSource "SalesSource". Définissez la propriété DataSet du TDataSource sur "SalesTable" à l'aide du menu déroulant. Définissez la propriété Name sur "SalesSource".
- TDataSource "CustomerSource". Définissez la propriété DataSet du TDataSource sur "CustomerTable" à l'aide du menu déroulant. Définissez la propriété Name sur "CustomerSource".
- TDataSource "EmployeeSource". Définissez la propriété DataSet du TDataSource sur "EmployeeTable" à l'aide du menu déroulant. Définissez la propriété Name sur "EmployeeSource".
- TDataSource "SalaryHistorySource". Définissez la propriété DataSet du TDataSource sur "SalaryHistoryTable" à l'aide du menu déroulant. Définissez la propriété Name sur "SalaryHistorySource".
- Certains des TIBDataSet doivent être liés à un TDataSource pour configurer une relation avec une autre table.
- Sélectionnez le TIBDataSet "CustomerTable". Définissez DataSource sur "SalesSource" depuis le menu déroulant.
- Sélectionnez le TIBDataSet "SalaryHistoryTable". Définissez DataSource sur "EmployeeSource" depuis le menu déroulant.
Ajouter des gestionnaires d'événement
L'étape finale de la construction du TDataModule consiste à ajouter quelques gestionnaires d'événement.
- Sélectionnez le TDataModule. Dans l'inspecteur d'objets, cliquez sur l'onglet Evénements. Double-cliquez sur l'événement OnCreate pour générer le code squelette de l'événement. Ajoutez le code suivant pour cet événement :
Delphi
procedure TDmEmployee.DmEmployeeCreate(Sender: TObject);
begin
EmployeeDatabase.Open;
end;
- Sélectionnez le TIBDataSet "EmployeeTable". Dans l'onglet Evénements, double-cliquez sur l'événement AfterPost. Utilisez le code suivant pour ce gestionnaire :
procedure TDmEmployee.EmployeeTableAfterPost(DataSet: TDataSet);
begin
{ A change in an employee salary triggers a change in the salary history,
so if that table is open, it needs to be refreshed now }
with SalaryHistoryTable do if Active then Refresh;
end;
- Sélectionnez le TIBDataSet "EmployeeTable". Dans l'onglet Evénements, double-cliquez sur l'événement BeforeDelete. Utilisez le code suivant pour ce gestionnaire :
procedure TDmEmployee.EmployeeTableBeforeDelete(DataSet: TDataSet);
begin
{ Assign the current employee's id to the stored procedure's parameter }
DeleteEmployeeProc.Params.ParamValues['EMP_NUM'] := EmployeeTable['EMP_NO'];
DeleteEmployeeProc.ExecProc; { Trigger the stored proc }
EmployeeTable.Refresh; { Refresh the data }
{ Block the EmployeeTable delete since the stored procedure did the work }
Abort;
end;
Ceci termine le module de données que vous utiliserez à la section suivante. Avant d'aller à la section suivante, examinez le code de ce module. Notez que de nombreux objets ont été ajoutés automatiquement à la classe module de données qui représente les champs de la table, tels que SalesTablePO_NUMBER
.