Création du côté serveur avec DataSnap Server (tutoriel InterBase)

De RAD Studio
Aller à : navigation, rechercher

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.

  1. 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.
  2. 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.
Votre fiche serveur doit maintenant ressembler à ceci :
DS App1.jpg


  1. 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.
  2. Affichez la boîte de dialogue Nouveaux éléments en effectuant l'une des actions suivantes
    • Cliquez sur le bouton d'outil Nouveaux éléments TutorialInterbase-MC-NewFileTool.png
    • Choisissez Fichier > Nouveau > Autre.
  3. 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.
  4. 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".
    Lors du glissement de la table sur la fiche, les deux composants ont été connectés automatiquement. La propriété SQLConnection de EMPLOYEE_TABLE a été définie sur le TSQLConnection EMPLOYEE_CONNECTION.
  5. 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é.
    Le module de données ressemble maintenant à la figure ci-dessous. Bien que cette figure montre un projet Delphi, l'aspect du projet C++Builder est très similaire. TutorialInterbase-MC-FormDBCompkh.png
  6. 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 sous public, ajoutez cette déclaration de fonction :

    function callStoredProcedure (mylocalkey : Integer) : String;
    


    Utilisez l'achèvement de classe en appuyant sur CTRL-MAJ-C pour créer un stub pour cette fonction dans la section implementation.

    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);
    
  7. 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 projet AnsiString (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.

  8. 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"
    
  9. Enregistrez l'unité. Construisez le projet serveur et corrigez les erreurs éventuelles, mais n'exécutez pas le serveur pour l'instant.
  10. 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

Suivant

Création d'une interface client enrichie