Création du côté serveur avec DataSnap Server (tutoriel InterBase)
Remonter à Tutoriel : Utilisation d'une base de données InterBase dans une application Delphi ou C++
Vous pouvez implémenter un serveur dans Delphi ou C++. Cet exemple présente les deux. Il n'est pas nécessaire que le client soit implémenté dans le même langage. DataSnap vous permet d'avoir un serveur Delphi et un client C++, ou vice-versa.
Suivez ces étapes pour créer un serveur.
- Créez un nouveau projet.
- Pour Delphi, choisissez Fichier > Nouveau > Application Fiches VCL - Delphi pour créer un nouveau projet Delphi.
- Pour C++, choisissez Fichier > Nouveau > Application Fiches VCL - C++Builder pour créer un nouveau projet C++Builder.
- Faites glisser les composants suivants de la catégorie Serveur Datasnap, de la Palette d'outils sur la fiche
-
- Définissez la propriété Caption de la fiche sur "ServerForm". Cliquez sur Fichier > Tout enregistrer pour enregistrer le projet.
- Pour Delphi, enregistrez le fichier sous ServerForm.pas et le projet sous ServerDemo.dproj.
- Pour C++, enregistrez le fichier sous ServerForm.cpp et le projet sous ServerDemo.cbproj.
- Définissez la propriété Caption de la fiche sur "ServerForm". Cliquez sur Fichier > Tout enregistrer pour enregistrer le projet.
-
- Votre fiche serveur doit maintenant ressembler à ceci :
- Suivez les étapes ci-après pour lier les trois composants ensemble
- Sélectionnez le composant TDSServerClass sur la fiche. Sur le menu déroulant, définissez sa propriété Server sur le nom de votre composant TDSServer, DSServer1 dans cet exemple.
- Sélectionnez le composant TDSTCPServerTransport sur la fiche. Sur le menu déroulant, définissez sa propriété Server sur le nom de votre composant TDSServer, DSServer1 dans cet exemple.
- Affichez la boîte de dialogue Nouveaux éléments en effectuant l'une des actions suivantes
- Un_ServerModule est un module de données auquel vous pouvez ajouter divers contrôles de base de données. Vous pouvez aussi ajouter des méthodes publiques à son code en utilisant l'éditeur de code, comme présenté plus loin.
- Vous pouvez ajouter des composants à un projet en les faisant glisser depuis l'explorateur de données. Sur le volet de gauche de RAD Studio, cliquez sur l'onglet Explorateur de données. Si l'onglet INTERBASE n'est pas ouvert, ouvrez-le. Sous l'onglet INTERBASE, ouvrez EMPLOYEE puis Tables. Faites glisser la table EMPLOYEE sur la fiche Un_server_module, ce qui provoque l'ajout de deux nouveaux composants dbExpress à la fiche
- Un composant TSQLConnection. Définissez sa propriété Name sur "EMPLOYEE_CONNECTION".
- Un composant TSQLDataSet. Définissez sa propriété Name sur "EMPLOYEE_TABLE".
- Placez deux autres composants sur la fiche de Un_ServerModule
- Ajoutez un TDataSetProvider.
- Définissez sa propriété DataSet sur EMPLOYEE_TABLE sur le menu déroulant.
- Définissez son nom sur ServerDataSetProvider1 pour le distinguer d'un autre TDataSetProvider que vous ajouterez plus tard.
- Ajoutez un composant TSQLStoredProc.
- Définissez sa propriété SQLConnection sur "EMPLOYEE_CONNECTION" sur le menu déroulant.
- Définissez sa propriété StoredProcName sur "GET_EMP_PROJ" sur le menu déroulant. "GET_EMP_PROJ" est l'une des procédures stockées de la base de données Employee. Cette procédure stockée contient un identificateur de projet associé à un numéro d'employé.
- Ajoutez un TDataSetProvider.
- Ajoutez à Un_ServerModule les fonctions que vous voulez exposer en tant que
public
.Remarque : Toutes les méthodes serveur de la section
public
de Un_ServerModule peuvent être appelées par le client.Delphi
Cliquez sur l'onglet Code. Dans la section
type
souspublic
, ajoutez cette déclaration de fonction :function callStoredProcedure (mylocalkey : Integer) : String;
Utilisez l'achèvement de classe en appuyant surCTRL-MAJ-C
pour créer un stub pour cette fonction dans la sectionimplementation
.C++
Cliquez sur l'onglet Un_ServerModule.h pour afficher le fichier d'en-tête. Ajoutez la fonction suivante sous
public:
:String _fastcall callStoredProcedure (int mylocalkey);
- Ecrivez le code de la fonction que vous venez d'ajouter.
La fonction
callStoredProcedure
appelle une procédure stockée avec un paramètre numéro d'employé de type entier (EMP_NO). Elle obtient un identificateur de projetAnsiString
(PROJ_ID). Elle définit le paramètre d'entrée, exécute la procédure, puis récupère le paramètre de sortie. Elle établit un parallèle avec la fonction qui sera écrite dans le client en termes de paramètres. Nous avons déjà défini la valeur de la propriété StoredProcName du composant TSQLStoredProc sur le nom de la procédure stockée, "GET_EMP_PROJ". Delphi Ajoutez la fonction suivante à Un_ServerModule.pas' :function TDSServerModule1.callStoredProcedure(mylocalkey: Integer): String; var myString : String; begin SQLStoredProc1.ParamByName('EMP_NO').AsInteger := mylocalkey; SQLStoredProc1.ExecProc; myString := SQLStoredProc1.ParamByName('PROJ_ID').AsString; result := myString; end;
C++
Ajoutez cette fonction après les autres fonctions membre dans Un_ServerModule.cpp :
String _fastcall TDSServerModule1::callStoredProcedure (int mylocalkey) { String myString; SQLStoredProc1->ParamByName("EMP_NO")->AsInteger = mylocalkey; SQLStoredProc1->ExecProc(); myString = SQLStoredProc1->ParamByName("PROJ_ID")->AsString; return myString; }
Puisque les noms de paramètre de la procédure stockée EMP_NO et PROJ_ID sont utilisés, leur valeur ordinale est obtenue par
ParamByName
. - Revenez à ServerForm en cliquant sur l'onglet ServerForm dans la liste de fichiers RAD Studio. Cliquez sur l'onglet Conception, puis cliquez sur la fiche. Sélectionnez le composant TDSServerClass. Pour le composant TDSServerClass, cliquez dans l'inspecteur d'objets sur l'onglet Evénements et double-cliquez sur OnGetClass. Le code de ce gestionnaire d'événements détermine la classe serveur que le serveur utilise
Delphi
procedure TForm1.DSServerClass1GetClass(DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass); begin PersistentClass := TDSServerModule1; end;
C++
void __fastcall TForm1::DSServerClass1GetClass(TDSServerClass *DSServerClass, TPersistentClass &PersistentClass) { PersistentClass = __classid(TDSServerModule1); }
Notez que la variable
PersistentClass
est assignée à une référence de classe, et pas à une référence d'objet.Fournissez la liaison nécessaire dans ServerForm à Un_ServerModule.
- Pour Delphi, accédez à la section
uses
de l'unité ServerForm et ajoutez Un_ServerModule, afin que TDSServerModule1 soit reconnu. - Pour C++, ajoutez cette ligne après les autres instructions include dans ServerForm.cpp :
# include "Un_ServerModule.h"
- Pour Delphi, accédez à la section
- Enregistrez l'unité. Construisez le projet serveur et corrigez les erreurs éventuelles, mais n'exécutez pas le serveur pour l'instant.
- Cliquez sur l'onglet Gestionnaire de projets dans RAD Studio. Enregistrez le groupe de projets en cliquant avec le bouton droit sur le groupe de projets et en cliquant sur Enregistrer le groupe de projets. Enregistrez le groupe de projets sous DSProj.groupproj. Dans la section suivante, nous ajouterons un autre projet à ce groupe de projets.
Cela termine le serveur, qui réalise les deux opérations suivantes :
- Fournir les données de la base de données qui peuvent être mises à jour
- Exécuter une procédure stockée et renvoyer une valeur
Précédent
Création d'une connexion de base de données