Création d'une interface client enrichie (tutoriel InterBase)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Tutoriel : Utilisation d'une base de données InterBase dans une application Delphi ou C++

Créons maintenant un client qui utilise le serveur. Le client utilise les deux fonctions suivantes du serveur :

  • Appel d'une procédure stockée et renvoi d'une valeur.
  • Affichage et mise à jour des données d'une table de base de données.

Voici un aperçu de la fiche de l'application client, avec les composants que vous allez ajouter :

TutorialInterbase-MC-ClientForm.png


Les composants visuels avec lesquels vous allez interagir sont situés sur le côté gauche de la fiche. Les composants non visuels que vous utilisez pour accéder à la base de données sont situés sur le côté droit.

Suivez ces étapes pour créer l'application client.

  1. Pour créer l'application client dans le même groupe de projets que l'application serveur, cliquez avec le bouton droit sur le nom du groupe de projets dans le Gestionnaire de projets et sélectionnez Ajouter un nouveau projet ou choisissez Projet > Ajouter un nouveau projet.
  2. La boîte de dialogue Nouveaux éléments apparaît.
    • Pour Delphi, sélectionnez la catégorie Projets Delphi, puis sélectionnez Application Fiches VCL.
    • Pour C++Builder, sélectionnez la catégorie Projets C++Builder, puis sélectionnez Application Fiches VCL.
    Cliquez sur OK. Sélectionnez la nouvelle fiche et définissez sa propriété Caption sur "Client demo" dans l'inspecteur d'objets. Choisissez Fichier > Tout enregistrer pour enregistrer les fichiers :
    • Pour Delphi, enregistrez l'unité sous Un_client_main.pas. Enregistrez le projet sous ClientDemo.dproj.
    • Pour C++, enregistrez l'unité sous Un_client_main.cpp. Enregistrez le projet sous ClientDemo.cbproj.
  3. Exécutez maintenant le serveur que vous avez construit dans la section précédente. Double-cliquez sur ServerDemo.exe dans le Gestionnaire de projets. Choisissez Exécuter > Exécuter sans débogage pour l'exécuter. Vous pouvez réduire la boîte de dialogue ServerForm qui apparaît.

Remarque : Le serveur doit être en cours d'exécution pour que vous puissiez établir la connexion au serveur et générer les classes client DataSnap à l'étape suivante.

  1. Placez un composant TSQLConnection sur la nouvelle fiche et définissez ses propriétés
    • Définissez la propriété Driver sur "DataSnap". Dans l'inspecteur d'objets, cliquez sur le signe + à gauche de la propriété Driver pour afficher d'autres propriétés
      • Définissez Port sur "211" (valeur par défaut).
      • Définissez HostName sur "localhost" (valeur par défaut).
      Ces propriétés peuvent aussi être définies en modifiant la propriété Params. Cliquez sur le bouton points de suspension (...) de la propriété Params pour afficher l'éditeur de liste de valeurs. Vous pouvez entrer des valeurs de propriétés dans cette boîte de dialogue, puis cliquer sur OK pour définir les valeurs.
    • Définissez LoginPrompt sur false pour empêcher l'affichage de la boîte de dialogue nom d'utilisateur et mot de passe à chaque connexion du client au serveur.
    • Définissez Connected sur true.
    • Alors que le serveur est en cours d'exécution, cliquez avec le bouton droit de la souris sur le TSQLConnection et sélectionnez Générer les classes client DataSnap dans le menu contextuel. Cette action crée une nouvelle unité. Enregistrez la nouvelle unité générée qui contient les classes client.
      • Pour Delphi, enregistrez l'unité sous Un_client_classes.pas.
      • Pour C++, enregistrez l'unité sous Un_client_classes.cpp.
    • Enregistrez les modifications dans Un_client_main.
  2. Liez l'unité Un_client_classes à Un_client_main.
    • Pour Delphi, cliquez sur l'onglet Un_client_main, cliquez sur son onglet Code, puis ajoutez Un_client_classes à la clause uses de Un_client_main.
    • Pour C++, cliquez sur l'onglet Un_client_main.cpp en haut de l'éditeur de code, puis cliquez sur l'onglet Un_client_main.cpp en bas de l'éditeur de code. Ajoutez l'instruction include suivante après les autres instructions include de Un_client_main.cpp :
    # include "Un_client_classes.h"
    
  3. Commençons maintenant la construction de l'interface décrite dans la figure ci-dessus. Dans le client Un_client_main, cliquez sur l'onglet Conception et faites glisser les composants de la Palette d'outils sur la fiche aux positions indiquées dans la figure ci-dessus
    • Un contrôle TDBNavigator pour naviguer à travers la base de données.
    • Un contrôle TDBGrid pour visualiser une table de base de données.
    • Trois contrôles TButton pour charger la table de base de données, mettre à jour les données de la base de données et appeler la procédure stockée. Définissez les propriétés Caption des TButton correspondants sur "Load R/W", "Apply updates" et "Get project", comme illustré dans la figure.
    • Un contrôle TEdit pour le numéro de l'employé. Laissez vide sa propriété Text.
    • Un contrôle TLabel pour afficher l'identificateur du projet.
    Dès que vous avez placé les composants, déplacez-les et redimensionnez-les à votre guise.
  4. Ajoutez les composants de base de données qui accèdent à la procédure stockée de la base de données et connectent ces composants entre eux.
    • Placez un composant TSqlServerMethod sur la fiche.
      • Définissez la propriété SQLConnection sur "SQLConnection1" depuis le menu déroulant.
      • Définissez la propriété ServerMethodName. Quand le serveur est en cours d'exécution, vous pouvez utiliser le menu déroulant de la propriété pour voir toutes les méthodes serveur disponibles. Sélectionnez "TDSServerModule1.callStoredProcedure", qui est la fonction du serveur qui appelle la procédure stockée.
      • Ne définissez pas Active sur true. Si vous le faites, vous obtiendrez un message d'erreur car la procédure stockée ne renvoie pas un ensemble de données.
    • Faites glisser un TDataSetProvider sur la fiche.
      • Définissez la propriété DataSet sur "SQLServerMethod1" depuis le menu déroulant.
    • Placez un TClientDataSet sur la fiche.
      • Définissez la propriété ProviderName sur "DataSetProvider1" depuis le menu déroulant.
    • Faites glisser un TDataSource sur la fiche.
      • Définissez sa propriété DataSet sur "ClientDataSet1" depuis le menu déroulant.
  5. Ajoutez les composants de base de données pour l'accès en lecture/écriture à l'ensemble de données.
    • Faites glisser un TDSProviderConnection sur la fiche. Ce composant fournisseur vous donne la capacité de naviguer librement parmi les mises à jour de la base de données et de les résoudre.
      • Définissez la propriété SQLConnection sur "SQLConnection1" depuis le menu déroulant.
      • Définissez la propriété ServerClassName sur "TDSServerModule1".

    Remarque : TDSServerModule1 est la classe de modules serveur de Un_ServerModule.

    • Placez un autre TClientDataSet sur la fiche.
      • Définissez la propriété RemoteServer sur "DSProviderConnection1" depuis le menu déroulant.
      • Définissez la propriété ProviderName sur "ServerDataSetProvider1" depuis le menu déroulant.
    • Faites glisser un autre TDataSource sur la fiche.
      • Définissez sa propriété DataSet sur "ClientDataSet2" depuis le menu déroulant.
    • Connectez les contrôles TDBGrid et TDBNavigator à la source de données en définissant la propriété DataSource des deux composants sur "DataSource2".
    • Testez les connexions.
      • Définissez la propriété Active du TClientDataSetClientDataSet2 sur true. Le composant TDBGrid devrait devenir actif, en affichant les données de la table EMPLOYEE de la base de données.
      • Définissez la propriété Active du ClientDataSet2 sur false. L'application client définira ClientDataSet2 sur true pour activer la connexion de base de données du gestionnaire d'événements que nous allons bientôt ajouter.
    • Ajoutez l'événement clic pour le contrôle TButton "Load R/W". Sélectionnez ce TButton. Dans l'onglet Evénements de l'inspecteur d'objets, double-cliquez sur l'événement OnClick pour générer le code squelette. Ajoutez une ligne pour activer le TClientDataSet dans le gestionnaire d'événements :

    Delphi

    procedure TForm2.Button3Click(Sender: TObject);
    begin
      ClientDataSet2.Active := true;
    end;
    

    C++

    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
      ClientDataSet2->Active = true;
    }
    
    • De la même façon, ajoutez le gestionnaire d'événements OnClick pour le contrôle TButton "Apply updates". Créez le squelette du gestionnaire d'événements comme ci-dessus, et ajoutez le code suivant :

    Delphi

    procedure TForm2.Button4Click(Sender: TObject);
    begin
      ClientDataSet2.ApplyUpdates(0);
    end;
    

    C++

    void __fastcall TForm2::Button2Click(TObject *Sender)
    {
      ClientDataSet2->ApplyUpdates(0);
    }
    
    Le paramètre pour ApplyUpdates est le nombre d'erreurs à tolérer, zéro dans ce cas.
  6. Configurez l'appel de la procédure stockée.
    Créez un squelette de gestionnaire d'événements pour l'événement OnClick du TButton. Un clic sur ce TButton provoque l'appel de la méthode que nous avons définie sur le serveur. Puisque la procédure stockée prend une valeur entière, nous devons convertir le texte du contrôle TEdit du numéro d'employé en entier. Voici le code du gestionnaire d'événements qui le fait :
    Delphi
    procedure TForm2.Button1Click(Sender: TObject);
    var
      mykey : Integer; //variable to hold text from edit box
      myServer : TDSServerModule1Client;  //server proxy we will call
    begin
      mykey := StrToInt(Edit1.Text);  //conversion to integer
      SQLConnection1.Open;
      // Server creation using the SQLConnection for communication
      myServer := TDSServerModule1Client.Create(SQLConnection1.DBXConnection);
        try
        // Calling method that calls the stored procedure with the key.
        // Set label to value returned from stored procedure.
        Label1.Caption := myServer.callStoredProcedure(mykey);
      finally
        if SQLConnection1.Connected then
          SQLConnection1.Close;
        myServer.Free;  //free up the server
      end;
    end;
    

    C++

    void __fastcall TForm2::Button3Click(TObject *Sender)
    {
      int mykey; //variable to hold text from edit box
      TDSServerModule1Client *myServer;  //server proxy we will call
    
      mykey = StrToInt(Edit1->Text);  //conversion to integer
      SQLConnection1->Open();
      // Server creation using the SQLConnection for communication
      myServer = new TDSServerModule1Client(SQLConnection1->DBXConnection);
      try
      {
        // Calling method that calls the stored procedure with the key.
        // Set label to value returned from stored procedure.
        Label1->Caption = myServer->callStoredProcedure(mykey);
      }
      __finally
      {
        if (SQLConnection1->Connected)
          SQLConnection1->Close();
        delete myServer;  //free up the server
      }
    }
    
    Notez que le code précédent définit la propriété Caption du TLabel sur la valeur renvoyée depuis l'appel de la procédure stockée : l'identificateur du projet.
  7. Sélectionnez Fichier > Tout enregistrer pour enregistrer tous les fichiers.
  8. Obtenez les informations de la base de données depuis la table EMPLOYEE_PROJECT. Avant d'exécuter l'application client, nous devons obtenir les informations d'une table de la base de données. Dans l'explorateur de données, ouvrez l'entrée de connexion INTERBASE, puis la connexion EMPLOYEE sous cette entrée. Sous cette connexion, ouvrez Tables. Cliquez avec le bouton droit sur EMPLOYEE_PROJECT et sélectionnez Récupérer les données de la table pour afficher les données de cette table : TutorialInterbase-MC-DBXEmpProj.png Notez quelques valeurs de la colonne EMP_NO. La procédure stockée que nous utilisons, GET_EMP_PROJ, accède à la table EMPLOYEE_PROJECT. Nous avons besoin de connaître quelques numéros d'employé valides pour récupérer les données de cette table en utilisant cette procédure stockée.
  9. Construisez et exécutez le côté client du projet.
    • Construisez le projet client en cliquant avec le bouton droit sur ClientDemo dans le Gestionnaire de projets et en sélectionnant Construire. Corrigez les erreurs éventuelles.
    • Exécutez l'application client. La boîte de dialogue suivante apparaît :
    TutorialInterbase-MC-ClientAppRunning.png
    • Cliquez sur le TButton "Load R/W", qui active le TClientDataSet "ClientDataSet2". Le contrôle TDBGrid est rempli avec les entrées de la table EMPLOYEE. Le contrôle TDBNavigator est aussi actif, vous permettant ainsi de naviguer parmi les entrées de la table.
    TutorialInterbase-MC-ClientAppRunningTable.png
    • Vous pouvez sélectionner une cellule dans le TDBGrid et modifier sa valeur. Un clic sur le TButton "Apply updates" met à jour la table de la base de données avec les modifications.
    • Finalement, testez la procédure stockée. Entrez un numéro d'employé valide dans le contrôle TEdit et cliquez sur le TButton "Get project". Le libellé sous le TButton doit correspondre à l'identificateur de projet approprié de la table EMPLOYEE_PROJECT :
    TutorialInterbase-MC-StoredProcData.png Ceci achève l'exécution du client en tant qu'application.

    Précédent

    Création du côté serveur avec DataSnap Server

    Suivant

    Création de l'interface Web