Erstellen eines Servers mit DataSnap (InterBase-Tutorial)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Tutorial: Eine InterBase-Datenbank in einer Delphi- oder C++-Anwendung verwenden

Ein Server kann entweder in Delphi oder C++ implementiert werden. Dieses Beispiel beschreibt das Vorgehen für beide Sprachen. Der Client muss nicht in derselben Sprache implementiert werden. Sie können z.B. einen Delphi-Server und einen C++-Client oder umgekehrt verwenden.

Führen Sie zum Erstellen eines Servers die folgenden Schritte aus.

  1. Erstellen Sie ein neues Projekt.
    • Delphi: Wählen Sie Datei > Neu > VCL-Formularanwendung - Delphi, um ein neues Delphi-Projekt zu erstellen.
    • C++: Wählen Sie Datei > Neu > VCL-Formularanwendung - C++Builder, um ein neues C++Builder-Projekt zu erstellen.
  2. Ziehen Sie die folgenden Komponenten aus der Kategorie DataSnap-Server der Tool-Palette auf das Formular:
Setzen Sie die Eigenschaft Caption des Formulars auf "ServerForm". Wählen Sie Datei > Alles speichern, um das Projekt zu speichern.
  • Delphi: Speichern Sie die Datei unter dem Namen ServerForm.pas und das Projekt unter dem Namen ServerDemo.dproj.
  • C++: Speichern Sie die Datei unter dem Namen ServerForm.cpp und das Projekt unter dem Namen ServerDemo.cbproj.
Ihr Serverformular sollte nun folgendermaßen aussehen:
DS App1.jpg


  1. Führen Sie die folgenden Schritte aus, um die drei Komponenten miteinander zu verknüpfen:
    • Wählen Sie die TDSServerClass-Komponente auf dem Formular aus. Setzen Sie im Dropdown-Menü deren Eigenschaft Server auf den Namen Ihrer TDSServer-Komponente (DSServer1 in diesem Beispiel).
    • Wählen Sie die TDSTCPServerTransport-Komponente auf dem Formular aus. Setzen Sie im Dropdown-Menü deren Eigenschaft Server auf den Namen Ihrer TDSServer-Komponente (DSServer1 in diesem Beispiel).
  2. Öffnen Sie das Dialogfeld Objektgalerie mit einer der folgenden Methoden:
    • Klicken Sie in der Symbolleiste auf die Schaltfläche Objektgalerie TutorialInterbase-MC-NewFileTool.png.
    • Wählen Sie Datei > Neu > Weitere.
    Delphi
    Fügen Sie eine neue Delphi-Datei als Server-Modul hinzu. Klicken Sie dazu auf Delphi-Projekte > DataSnap-Server, wählen Sie Server-Modul aus, und klicken Sie auf OK. Speichern Sie das Modul unter dem Namen Un_ServerModule.pas.
    TutorialInterbase-MC-NewItems.png
    C++
    Fügen Sie eine neue C++-Datei als Server-Modul hinzu. Klicken Sie dazu auf C++Builder-Projekte > DataSnap-Server, wählen Sie Server-Modul aus, und klicken Sie auf OK. Speichern Sie das Modul unter dem Namen Un_ServerModule.cpp.
    TutorialInterbase-MC-NewItemsCPP.png
  3. Un_ServerModule ist ein Datenmodul, dem Sie verschiedene Datenbanksteuerelemente hinzufügen können. Dem Quellcode des Moduls können Sie im Quelltext-Editor auch public Methoden hinzufügen, wie weiter unten gezeigt.
  4. Sie können einem Projekt Komponenten hinzufügen, indem Sie Elemente aus dem Daten-Explorer ziehen. Klicken Sie im rechten Bereich von RAD Studio auf die Registerkarte Daten-Explorer. Falls der Knoten INTERBASE nicht geöffnet ist, holen Sie dies nach. Öffnen Sie unter INTERBASE den Knoten EMPLOYEE und dann den Knoten Tabellen. Ziehen Sie die Tabelle EMPLOYEE auf das Formular Un_server_module. Dadurch werden dem Formular zwei neue dbExpress-Komponenten hinzugefügt:
    • Eine TSQLConnection-Komponente. Setzen Sie deren Eigenschaft Name auf "EMPLOYEE_CONNECTION".
    • Eine TSQLDataSet-Komponente. Setzen Sie deren Eigenschaft Name auf "EMPLOYEE_TABLE".
    Beim Ablegen der Tabelle auf dem Formular wurden die beiden Komponenten bereits automatisch verbunden. Die Eigenschaft SQLConnection von EMPLOYEE_TABLE wurde auf die TSQLConnection-EMPLOYEE_CONNECTION gesetzt.
  5. Platzieren Sie zwei weitere Komponenten auf dem Formular Un_ServerModule:
    • Fügen Sie eine TDataSetProvider-Komponente hinzu.
      • Setzen Sie im Dropdown-Menü deren Eigenschaft DataSet auf "EMPLOYEE_TABLE".
      • Ändern Sie die Eigenschaft Name in ServerDataSetProvider1, um die Komponente von einer anderen TDataSetProvider-Komponente zu unterscheiden, die später hinzugefügt wird.
    • Fügen Sie eine TSQLStoredProc-Komponente hinzu.
      • Setzen Sie im Dropdown-Menü deren Eigenschaft SQLConnection auf "EMPLOYEE_CONNECTION".
      • Setzen Sie im Dropdown-Menü die Eigenschaft StoredProcName auf "GET_EMP_PROJ". "GET_EMP_PROJ" ist eine der Stored Procedures in der Datenbank Employee. Diese Stored Procedure ermittelt eine Projekt-ID, die einer Mitarbeiternummer zugeordnet ist.
    Das Datenmodul sollte nun so wie in der folgenden Abbildung dargestellt aussehen. Diese Abbildung zeigt ein Delphi-Projekt, aber das C++Builder-Projekt sieht sehr ähnlich aus. TutorialInterbase-MC-FormDBCompkh.png
  6. Fügen Sie zu Un_ServerModule die Funktionen hinzu, die als public bereitgestellt werden sollen.

    Hinweis: Alle Servermethoden im Abschnitt public von Un_ServerModule können von dem Client aufgerufen werden.

    Delphi

    Klicken Sie auf das Register Code. Fügen Sie in den Abschnitt type unter public die folgende Funktionsdeklaration ein:

    function callStoredProcedure (mylocalkey : Integer): String;
    


    Erstellen Sie mithilfe der Klassenvervollständigung durch Drücken von STRG+UMSCH+C im implementation-Abschnitt ein Stub für diese Funktion.

    C++

    Klicken Sie auf das Register Un_ServerModule.h, um die Header-Datei anzuzeigen. Fügen Sie unter public: die folgende Funktion hinzu:

    String _fastcall callStoredProcedure (int mylocalkey);
    
  7. Schreiben Sie den Quellcode für die gerade hinzugefügte Funktion. Die Funktion callStoredProcedure ruft eine Stored Procedure mit dem Integer-Parameter "Mitarbeiternummer" (EMP_NO) auf. Die Funktion ermittelt eine AnsiString-Projekt-ID (PROJ_ID). Die Funktion setzt den Eingabeparameter, führt die Prozedur aus und ruft den Ausgabeparameter ab. Die Funktion entspricht hinsichtlich der Parameter der Funktion, die später im Client geschrieben wird. Den Wert der Eigenschaft StoredProcName der TSQLStoredProc-Komponente haben Sie bereits auf den Namen der Stored Procedure, "GET_EMP_PROJ", gesetzt. Delphi Fügen Sie Un_ServerModule.pas' die folgende Funktion hinzu:
    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++

    Fügen Sie diese Funktion nach den anderen Member-Funktionen in Un_ServerModule.cpp ein:

    String _fastcall TDSServerModule1::callStoredProcedure (int mylocalkey)
    {
      String myString;
    
      SQLStoredProc1->ParamByName("EMP_NO")->AsInteger = mylocalkey;
      SQLStoredProc1->ExecProc();
      myString = SQLStoredProc1->ParamByName("PROJ_ID")->AsString;
      return myString;
    }
    

    Beachten Sie bitte Folgendes: Weil die tatsächlichen Parameternamen, EMP_NO und PROJ_ID, in der Stored Procedure verwendet werden, wird von ParamByName deren Ordinalwert ermittelt.

  8. Wechseln Sie wieder zum Formular ServerForm, indem Sie auf das Register ServerForm klicken. Klicken Sie auf die Registerkarte Design, um das Formular anzuzeigen. Wählen Sie die TDSServerClass-Komponente aus. Klicken Sie im Objektinspektor für die TDSServerClass-Komponente auf das Register Ereignisse, und doppelklicken Sie auf OnGetClass. Der Quellcode dieser Ereignisbehandlungsroutine legt fest, welche Serverklasse der Server verwendet: 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);
    }
    

    Beachten Sie bitte, dass die Variable PersistentClass einer Klassenreferenz – keiner Objektreferenz – zugewiesen wird.

    Legen Sie die erforderliche Verknüpfung von ServerForm zu Un_ServerModule fest.

    • Delphi: Fügen Sie dem Abschnitt uses der Unit ServerForm den Eintrag Un_ServerModule hinzu, damit TDSServerModule1 erkannt wird.
    • C++: Fügen Sie die folgende Zeile nach den anderen "includes" in ServerForm.cpp ein:
    # include "Un_ServerModule.h"
    
  9. Speichern Sie die Unit. Erzeugen Sie das Serverprojekt, und beheben Sie etwaige Fehler, aber führen Sie den Server noch nicht aus.
  10. Klicken Sie in RAD Studio auf die Registerkarte Projektverwaltung. Klicken Sie mit der rechten Maustaste auf die Projektgruppe, und wählen Sie Projektgruppe speichern. Speichern Sie die Projektgruppe unter dem Namen DSProj.groupproj. Im nächsten Abschnitt wird dieser Projektgruppe ein weiteres Projekt hinzugefügt.

Damit ist die Erstellung des Servers abgeschlossen. Der Server führt Folgendes aus:

  • Bereitstellen von Datenbankdaten, die aktualisiert werden können
  • Ausführen einer Stored Procedure und Rückgabe eines Wertes

Zurück

Erstellen einer Datenbankverbindung