Delphi Labs: DataSnap XE - 多層データベースアプリケーション

By: Chikako Yonezawa

Abstract: InterBase XE のサンプルデータベース内の "Employee" の情報にアクセスして、読み書きを行う DataSnap XE 多層データベースアプリケーションを Delphi XE を使用して作成する手順を説明します。このサーバーとクライアントアプリケーションは、Delphi コンポーネントとたった2行の Delphi コードで、10分ほどで作成できます。ビデオバージョンを YouTube 上の (http://www.youtube.com/watch?v=B4uxLLIUddg) で公開しています。

    はじめに

このラボでは、Delphi XE を使用して、サーバーとクライアントアプリケーションで構成されている簡単な多層データベースソリューションを作成します。

このラボの作業のために、ご自身で選択したデータベースを使用することができますが、この記事では、データベースサーバーとして Embarcadero InterBase XE の RDBMSを使用します。もし、InterBase XE をお持ちでないのであれば、以下のサイトより開発用の Developer Edition をダウンロードしてインストールすることが可能です。

https://downloads.embarcadero.com/free/interbase

ここでは、InterBase XE のサンプルの “EMPLOYEE” データベースを使用します。

最初に、Delphi のデータエクスプローラで、この “EMPLOYEE” データベースへの接続を設定する必要があります。

    データエクスプローラでのデータベース接続の設定

データエクスプローラの “INTERBASE” ノード上で、マウスの右ボタンをクリックし、表示されたポップアップメニューより「新規接続を追加」を選択します。そして、それに “IBEMPLOYEE” と名づけます。

Hide image
DataSnap20

データベース接続の設定の為、データエクスプローラの新しく作成された “IBEMPLOYEE” ノード上でマウスの右ボタンをクリックし、表示されたポップアップメニューより「接続の変更」を選択します。

InterBase XE をデフォルトでインストールした場合、サンプルデータベース “EMPLOYEE” の位置は “C:\Embarcadero\InterBase\examples\database\employee.gdb” となります。デフォルトのユーザー名とパスワードは “sysdba”、および、“masterkey” です。

Hide image
DataSnap21

接続が正しく構成されたかを確認するために [テスト接続] のボタンをクリックします。

Hide image
DataSnap22

多層データベースシステムのサーバーおよびクライアントアプリケーションを構築する準備が整いました。


    多層データベースソリューション用 DataSnap Server を作成する

最初のステップでは、“DataSnap Server” ウィザードを使用して、新規の DataSnap Server アプリケーションを作成します。

メインメニューで [ファイル|新規作成|その他] を選択し、表示された「新規作成」ダイアログで、[Delphi プロジェクト|DataSnap Server] カテゴリの DataSnap Server アイコンをダブルクリックします。

Hide image
DataSnap23

Hide image
Click to see full-sized image

最初に「プロジェクトの種類」を選択します。ここではデフォルトの「VCLフォームアプリケーション」を選択し、次へ進みます。

Hide image
Click to see full-sized image

次の画面は、全てデフォルトのままの選択とします。

Hide image
Click to see full-sized image

3番目の画面は、TCP/IP ポートのデフォルトの値である 211 のままとします。[ポートのテスト] のボタンをクリックすると、ポート番号が使用可能かどうかをテストすることができます。

Hide image
Click to see full-sized image

最後の画面では、サーバーメソッドのクラスの基底クラスとして “TDSServerModule” を選択します。

[完了] ボタンをクリックすると、ウィザードは、3つのユニットを持った新しいプロジェクトを生成します。

[ファイル|すべて保存]をクリックします。

例えば、“C:\DataSnapLabs\MultiTier\” のような新しいディレクトリを作成し、このラボのすべてのファイルを格納します。

メインのアプリケーションフォーム名は “FormServerUnit”として保存します。そして、他のユニットはデフォルトの名前である “ServerContainerUnit1”、“ServerMethodsUnit1” のままとします。そして、プロジェクト名を “MultiTierServer” として保存します。

このラボのような簡単な DataSnap サーバーのデータベース接続を実装するために、コーディングする必要はありません! ”ServerMethodsUnit1” へ、いくつかのコンポーネントを追加するだけです。

このラボでは、CUSTOMERS という EMPLOYEE データベース内の1つのデータベーステーブルへのアクセスを提供します。クライアントアプリケーションは、顧客情報の参照と、その更新を行うことができます。

次の手順の目標は、“ServerMethodsUnit1” のデザイン画面で、“TSQLConnection”, “TSQLDataSet”, “TDataSetProvider” コンポーネントを追加して結びつけることです。この目標を達成する最も簡単な方法は、データエクスプローラと、VCLフォームデザイナの統合を使用することです。データエクスプローラで、目的のテーブルを選択し、“ServerMethodsUnit1” にドラッグすると、初めの2つのコンポーネントが自動的に作成、設定されます。

TSQLConnection と TSQLDataSet コンポーネントが、サーバーメソッドユニットに自動的に追加されるばかりでなく、既にプロパティが命名され、設定されているのに注意してください。

最後の手順として、データモジュールに “TDataSetProvider” コンポーネントをドロップし、“DataSet” プロパティを “CUSTOMER” に設定します。例えば、“dspCustomer” のような何か意味のあるデータセットプロバイダ名をつけると良いでしょう。

Hide image
Click to see full-sized image

デモのサーバーは、完全に実装されました。とても簡単に、一行のコードを書くことも無しに!

クライアントアプリケーションの開発の為にサーバーを動作させる必要があります。

[実行|デバッカを使わずに実行] でサーバープロジェクトを実行し、そのウィンドウを最小化しておきます。

このラボの作業が終了するまで、サーバーをシャットダウンしないで下さい

    多層データベースソリューション用 DataSnap Client の作成

プロジェクトマネージャ内のプロジェクトグループを選択し、マウスの右ボタンをクリックします。表示されたポップアップメニューより「新規プロジェクトを追加」を選択します。

Hide image
DataSnap29

「新規作成」ダイアログの [Delphi プロジェクト] カテゴリの 「VCL フォームアプリケーション」を選択します。

Hide image
DataSnap30

[OK] ボタンをクリックして、プロジェクトグループに新しいプロジェクトを追加します。

メニューの [ファイル|すべて保存] でサーバープロジェクトと同じところに保存します。その際、クライアントアプリケーションのメインフォーム名を “FormClientUnit” とし、新しいプロジェクト名は “MultiTierClient” とします。また、プロジェクトグループ名は “MultiTierGrp” とします。

クライアントのフォームに “TSQLConnection” コンポーネントをドロップし、そしてその “Driver” プロパティに “DataSnap” を設定します。“LoginPrompt” プロパティは、プロンプトを表示しないよう “False” に設定します。

フォームに “TDSProviderConnection” コンポーネントをドロップし、ドロップダウンから “SQLConnection” プロパティの値として、すでにフォーム上にある “SQLConnection1” component コンポーネントを設定します。

“DSProviderConnection1.ServerClassName” プロパティの値として “TServerMethods1” を入力します。

フォームに “TClientDataSet” コンポーネントを追加します。

“RemoteServer” プロパティを “DSProviderConnection1” に設定します。.

ClientDataSet1 の “ProviderName” プロパティをドロップダウンし、表示されたリストより “dspCUSTOMER” を選択します。

フォームに “TDataSource” コンポーネントを追加し、“DataSet” プロパティを “ClientDataSet1” に設定します。.

フォームに “TDBGrid” コンポーネントを追加し、“DataSource” プロパティを “DataSource1” に設定します。.

フォームに “TDBNavigator” コンポーネントを追加し、“DataSource” プロパティを“DataSource1” に設定します。.

フォームに “TCheckBox” コンポーネントを追加し、“Caption” プロパティの値を “Active” に変更します。

“CheckBox1” コンポーネントをダブルクリックし、“OnClick”イベントに以下のコードを記載します:

procedure TForm3.CheckBox1Click(Sender: TObject);
begin
  ClientDataSet1.Active := CheckBox1.Checked;
end;

フォームに “TButton” コンポーネントを追加します。ダブルクリックし、“OnClick” イベントに以下のコードを記載します:

procedure TForm3.Button1Click(Sender: TObject);
begin
  ClientDataSet1.ApplyUpdates(-1);
end;

この段階で、クライアントのフォームは、このようになります:

Hide image

クライアントの動作をご覧下さい!

アプリケーションを実行し、“Active” チェックボックスをクリックすると、グリッド内に顧客情報が表示されます!

顧客データをいくつか変更し、ClientDataSet1 データのインメモリへ変更をポストするためにナビゲータコンポーネント内の [Post] ボタンをクリックします。そして、サーバーへ変更を送信するために [Apply Update] ボタンをクリックします。

クライアントアプリケーションの再実行により、変更がデータベースに格納されていることを確認することができます。

ほんの少しビジュアルコンポーネントを再構成するだけで、最終的にクライアントアプリケーションは、このようになります。

Hide image

これだけ!

ウィザードといくつかのコンポーネントとたったの2行のコードで、Delphi 多層 DataSnap データベースソリューションを作成することができました。

これが “RAD(Rapid Application Development – 迅速なアプリケーション開発)” です。

    まとめ

この Delphi ラボでは、TCP/IP プロトコルを使用し、相互に通信するネイティブの Win32 アプリケーションのサーバーとクライアントから成る簡単な多層データベースアプリケーションを Delphi XE と InterBase XE で構築しました。

この記事のすべてのソースコードは、Embarcadero Code Central の http://cc.embarcadero.com/item/28188 にあります。

この記事内の手順の説明ビデオバージョンが YouTube 上の http://www.youtube.com/watch?v=B4uxLLIUddg にあります。

Delphi の詳細情報は、Delphi ホームページ http://www.embarcadero.com/jp/products/delphi で得ることができます。

Server Response from: ETNASC04