リッチクライアント インターフェイスを作成する(InterBase チュートリアル)

提供: RAD Studio
移動先: 案内検索

チュートリアル:Delphi および C++ アプリケーションで InterBase データベースを使用する への移動


ここでは、サーバーを使用するクライアントを作成します。 このクライアントでは、サーバーの次の機能を両方使用します。

  • ストアド プロシージャを呼び出して値を返す
  • データベース テーブル内のデータを表示し、更新する

次の図は、コンポーネントを追加した後のクライアント アプリケーションのフォームです。

TutorialInterbase-MC-ClientForm.png


ユーザーが扱うビジュアル コンポーネントは、フォームの左側にあります。 データベースにアクセスするために使用する非ビジュアル コンポーネントは、右側にあります。

以下の手順でクライアント アプリケーションを作成します。

  1. サーバー アプリケーションと同じプロジェクト グループ内に、クライアント アプリケーションを作成します。[プロジェクト マネージャ]でプロジェクト グループ名を右クリックして[新規プロジェクトを追加...]を選択するか、[プロジェクト|新規プロジェクトを追加...]を選択します。
  2. [新規作成]ダイアログ ボックスが開きます。
    • Delphi の場合は、[Delphi プロジェクト]カテゴリを選択してから、[VCL フォーム アプリケーション]を選択します。
    • C++Builder の場合は、[C++Builder プロジェクト]カテゴリを選択してから、[VCL フォーム アプリケーション]を選択します。
    [OK]をクリックします。 新しいフォームを選択し、[オブジェクト インスペクタ][Caption]プロパティを「Client demo」に設定します。 [ファイル|すべて保存]を選択してファイルを保存します。
    • Delphi の場合は、ユニットを「Un_client_main.pas」という名前で保存します。 プロジェクトは「ClientDemo.dproj」という名前で保存します。
    • C++ の場合は、ユニットを「Un_client_main.cpp」という名前で保存します。 プロジェクトは「ClientDemo.cbproj」という名前で保存します。
  3. 次に、前のセクションでビルドしたサーバーを実行します。 [プロジェクト マネージャ]ServerDemo.exe をダブルクリックします。 [実行|デバッガを使わずに実行]を選択して、サーバーを実行します。 表示された[ServerForm]ダイアログは最小化しても構いません。

メモ: 次のステップでサーバーに接続し、DataSnap クライアント クラスを生成するには、サーバーが起動している必要があります。

  1. [TSQLConnection]コンポーネントを新しいフォームに配置し、プロパティを以下のように設定します。
    • [Driver]プロパティを[DataSnap]に設定します。 [オブジェクト インスペクタ]で、[Driver]プロパティの左にある[+]をクリックし、詳細なプロパティを表示します。
      • [Port]を「211」(デフォルト)に設定します。
      • [HostName]を「localhost」(デフォルト)に設定します。
      これらのプロパティは、[Params]プロパティを変更して設定することもできます。 [Params]プロパティの参照([...])ボタンをクリックして、[値リストの編集]ダイアログを開きます。 このダイアログでプロパティの値を入力し、[OK]をクリックすると、値が設定されます。
    • [LoginPrompt]を[False]に設定して、クライアントがサーバーに接続するたびにユーザー名とパスワードを入力するダイアログが表示されないようにします。
    • [Connected]を[True]に設定します。
    • サーバーが起動している状態で、TSQLConnection を右クリックし、コンテキスト メニューから[DataSnap クライアント クラスの生成]を選択します。 この作業を行うと、新しいユニットが生成されます。 クライアント クラスが含まれている新しく生成されたユニットを保存します。
      • Delphi の場合は、ユニットを 「Un_client_classes.pas」という名前で保存します。
      • C++ の場合は、ユニットを「Un_client_classes.cpp」という名前で保存します。
    • Un_client_main に対して行った変更を保存します。
  2. Un_client_classes ユニットを Un_client_main にリンクします。
    • Delphi の場合は、[Un_client_main]タブをクリックしてから[コード]タブをクリックし、Un_client_mainuses 句に Un_client_classes を追加します。
    • C++ の場合は、コード エディタ上部の[Un_client_main.cpp]タブをクリックしてから、コード エディタ下部の[Un_client_main.cpp]タブをクリックします。 Un_client_main.cpp に含まれる他の include 文の後に、次の include 文を追加します。
    # include "Un_client_classes.h"
    
  3. 次に、上の図で示したインターフェイスを構築します。 Un_client_main クライアントの[デザイン]タブをクリックし、[ツール パレット]から以下のコンポーネントをフォーム上にドラッグして、上の図のように配置します。
    • データベース内を移動するための[TDBNavigator]コントロール。
    • データベース テーブルを表示するための[TDBGrid]コントロール。
    • データベース テーブルの読み込み、データベース データの更新、ストアド プロシージャの呼び出しを行うための 3 つの[TButton]。 図に示すように、それぞれのTButton[Caption]を、「Load R/W」、「Apply updates」、「Get project」に設定します。
    • 従業員番号用の[TEdit]コントロール。 [Text]プロパティを空白に変更します。
    • プロジェクト ID を表示するための[TLabel]コントロール。

    これらのコンポーネントを配置した後で、適宜、移動やサイズの変更を行ってください。

  4. データベースのストアド プロシージャにアクセスしたり、コンポーネントを互いに接続するための、データベース コンポーネントを追加します。
    • [TSqlServerMethod]コンポーネントをフォームに配置します。
      • [SQLConnection]プロパティをドロップダウン メニューの "SQLConnection1" に設定します。
      • [ServerMethodName]プロパティを設定します。 サーバーが起動している場合には、このプロパティのドロップダウン メニューに、使用可能なすべてのサーバー メソッドが表示されます。 "TDSServerModule1.callStoredProcedure" を選択します。これは、ストアド プロシージャを呼び出すサーバー内の関数です。
      • [Active]を[True]に設定してはなりません。 [True]に設定すると、このストアド プロシージャはデータセットを返さないため、エラー メッセージが出力されます。
    • [TDataSetProvider]をフォームへドラッグします。
      • [DataSet]プロパティをドロップダウン メニューの "SQLServerMethod1" に設定します。
    • [TClientDataSet]をフォーム上に配置します。
      • [ProviderName]プロパティをドロップダウン メニューの "DataSetProvider1" に設定します。
    • [TDataSource]をフォームへドラッグします。
      • [DataSet]プロパティをドロップダウン メニューの "ClientDataSet1" に設定します。
  5. データセットに対して読み取り/書き込みアクセスをするためのデータベース コンポーネントを追加します。
    • [TDSProviderConnection]をフォームへドラッグします。 このプロバイダ コンポーネントは、データベース内を自由に移動し、更新を反映するためのものです。
      • [SQLConnection]プロパティをドロップダウン メニューの "SQLConnection1" に設定します。
      • [ServerClassName]プロパティを "TDSServerModule1"に設定します。

    メモ: "TDSServerModule1" は、Un_ServerModule のサーバー モジュール クラスです。

    • [TClientDataSet]をもう 1 つ、フォーム上に配置します。
      • [RemoteServer]プロパティをドロップダウン メニューの "DSProviderConnection1" に設定します。
      • [ProviderName]プロパティをドロップダウン メニューの "ServerDataSetProvider1" に設定します。
    • [TDataSource]をもう 1 つ、フォームへドラッグします。
      • [DataSet]プロパティをドロップダウン メニューの "ClientDataSet2" に設定します。
    • TDBGridTDBNavigator をデータ ソースに接続します。両コンポーネントの[DataSource]プロパティを "DataSource2" に設定してください。
    • 接続を確認します。
      • ClientDataSet2TClientDataSet)の[Active]プロパティを[True]に設定します。 TDBGrid コンポーネントがアクティブになり、データベースの EMPLOYEE テーブルのデータが表示されるはずです。
      • ClientDataSet2[Active]プロパティを[False]に戻します。 クライアント アプリケーションでは、次に追加するイベント ハンドラで ClientDataSet2 を[True]に設定して、データベース接続をアクティブにします。
    • [Load R/W](TButton)のクリック イベントを追加します。 この TButton を選択します。 [オブジェクト インスペクタ][イベント]タブで[OnClick]イベントをダブルクリックして、スケルトン コードを生成します。 TClientDataSet をアクティブにする次の 1 行を、イベント ハンドラ内に追加します。

    Delphi

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

    C++

    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
      ClientDataSet2->Active = true;
    }
    
    • 同様に、[Apply updates](TButton)の[OnClick]イベント ハンドラを追加します。 上と同じ手順でイベント ハンドラのスケルトンを作成し、次のコードを追加します。

    Delphi

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

    C++

    void __fastcall TForm2::Button2Click(TObject *Sender)
    {
      ClientDataSet2->ApplyUpdates(0);
    }
    
    ApplyUpdates のパラメータは、許容するエラーの数で、この場合は 0 です。
  6. ストアド プロシージャの呼び出しをセットアップします。
  7. [プロジェクトの取得](TButton)の[OnClick]イベントに対するイベント ハンドラのスケルトンを作成します。 この TButton をクリックすると、サーバーで定義したメソッドが呼び出されます。 このストアド プロシージャは整数値を受け取るため、従業員番号の TEdit に含まれるテキストを整数に変換する必要があります。 これを行うイベント ハンドラのコードは以下のとおりです。

    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
      }
    }
    
    上記のコードでは、呼び出したストアド プロシージャから返された値(プロジェクト ID)を、TLabel[Caption]に設定しています。
  8. [ファイル|すべて保存]を選択して、すべてのファイルを保存します。
  9. EMPLOYEE_PROJECT テーブルからデータベース情報を取得します。
  10. クライアント アプリケーションを実行する前に、データベース テーブルから情報を取得する必要があります。 [データ エクスプローラ]で[INTERBASE]の接続項目を開き、その下の[EMPLOYEE]接続を開きます。 この接続の下の[テーブル]を開きます。 [EMPLOYEE_PROJECT]を右クリックして[テーブルからのデータの取得]を選択すると、テーブルのデータが次のように表示されます。

    TutorialInterbase-MC-DBXEmpProj.png


    [EMP_NO]の列に表示されている値をいくつか書き留めておいてください。 アプリケーションで使用している GET_EMP_PROJ というストアド プロシージャでは、EMPLOYEE_PROJECT テーブルにアクセスします。 ストアド プロシージャを使ってこのテーブルからデータを取得するには、有効な従業員番号を知っている必要があります。

  11. プロジェクトのクライアント部分をビルドして実行します。
    • [プロジェクト マネージャ]ClientDemo を右クリックして[ビルド]を選択し、クライアント プロジェクトをビルドします。 エラーがあれば修正します。
    • クライアント アプリケーションを実行します。 次のダイアログが表示されます。

    TutorialInterbase-MC-ClientAppRunning.png


    • [Load R/W](TButton)をクリックすると、"ClientDataSet2"(TClientDataSet)がアクティブになります。 TDBGrid には、EMPLOYEE テーブルのエントリが表示されます。 TDBNavigator コントロールもアクティブになり、テーブル エントリの間を移動できるようになります。

    TutorialInterbase-MC-ClientAppRunningTable.png


    • TDBGrid のセルを選択して、値を変更することができます。 [Apply updates](TButton)をクリックすると、変更がデータベースに反映されます。
    • 最後にストアド プロシージャのテストを行います。 有効な従業員番号の 1 つを TEdit コントロールに入力し、[プロジェクトの取得](TButton)をクリックします。 TButton の下のラベルのキャプションが、EMPLOYEE_PROJECT テーブル内の該当するプロジェクト ID に変更されるはずです。

    TutorialInterbase-MC-StoredProcData.png


    これで、アプリケーションとして実行されるクライアントが完成しました。

    前のチュートリアル

    DataSnap サーバーでサーバー側コンポーネントを作成する

    次のチュートリアル

    Web インターフェイスを作成する