Delphiで学ぶコンピュータ言語
データアクセス用のコンポーネントを配置する
ここでは、InterBaseに接続します。データベースエクスプローラで、InterBaseに対する接続をクリックして、テーブル「EMPLOYEE」を選択します。そして、「EMPLOYEE」をドラッグして、フォームの上でドロップします。
すると、InterBaseに接続するためのコンポーネントが2つ、フォーム上に配置されます。SQLConnectionは、dbExpressドライバによってデータベースに接続するためのコンポーネントです。ここでは、IBEmployeeという名前が自動的に付けられています。もう1つは、SQLDataSet。SQLConnectionで接続するデータベースから、データセットを取得します。ここでは、EMPLOYEEという名前が付けられています。
図1:dbExpressコンポーネントの配置(クリックで拡大) |
dbExpressは、Delphiに搭載されたデータベース接続アーキテクチャで、複数のデータベースをサポートしています。共通のデータベース接続アーキテクチャを用いることで、データベースプラットフォームが変わっても、アプリケーションの変更を少なく済ませることができます。また、スケーラビリティを備えた柔軟なアーキテクチャであるため、アプリケーションの形態がクライアントサーバーから多層、Webなどに変わっても、データアクセス部分のロジックをそのまま再利用していくことができます。
複数のデータアクセスコンポーネントがもたらす柔軟性
簡単なドラッグ&ドロップ操作だけで、データベースに接続してデータセットを取得することができましたが、もう少しコンポーネントを追加します。Delphiのデータベースアクセスでは、それぞれのコンポーネントが特定の役割をこなし、それらをつなぎ合わせることで動作します。
なぜ、1つのコンポーネントで全部サポートしないのかというと、そこにメンテナンス性向上のポイントがあります。Delphiのデータベースアクセス用のコンポーネントには、次のような種類があります。
- データベースに接続する
- データセットを取得する
- ストアドプロシージャを実行する
- データセットを別のコンポーネントに結び付ける
- データセットをキャッシュする
- データセットを表示用のコンポーネントに結び付ける
接続するデータベースが変わったり、データの利用形態が変わったとしても、一部のコンポーネントを修正したり入れ替えたりすれば、アプリケーションは動作するようになります。コンポーネント同士を結び付けるために、共通のインターフェースを用いているため、一部の変更が他に与える影響を最小化してくれるのです。
ここでは、ツールパレットの「Data Access」カテゴリーから、TDataSetProviderとTClientDataSetを配置します。TSQLDataSetは、キャッシュを持たないため、Next方向にしかレコードのカーソル移動ができません。しかし、これらのコンポーネントを追加して、TSQLDataSetに結び付けることによって、クライアントキャッシュを実装し、双方向のカーソルに対応できます。
「結び付ける」という操作は、プロパティの設定によって行います。配置したTDataSetProvider(「DataSetProvider1」という名前が付けられています)を選択して、オブジェクトインスペクタで、次のようにプロパティを設定します。
プロパティ | 値 |
---|---|
DataSet | Employee |
次に、TClientDataSet(「ClientDataSet1」という名前が付けられています)を選択して、次のようにプロパティを設定します。
プロパティ | 値 |
---|---|
ProviderName | DataSetProvider1 |
Active | True |
表示・編集用のコントロールを配置する
次に行うのは、表示・編集用のコントロールの配置です。Delphiには、データベース対応のコントロールが多数用意されており、データセットと接続するだけで、自動的にデータベースのフィールドデータの表示や、編集、更新することができます。
先ほどプロパティを設定した、ClientDataSet1をダブルクリックします。すると、このデータセットの項目(フィールド)を設定するためのダイアログが表示されます。ここで、マウスを右クリックして[すべての項目の追加]を選択すると、データベースの列に相当する項目情報が追加されます。
図2:項目の追加(クリックで拡大) |
データセットの項目を選択すれば、それぞれのプロパティがオブジェクトインスペクタに表示されます。ここで、項目の属性を変更したり、イベントで、項目に対してなされた操作に対する処理を定義したりすることができます。
さて、ここですべての項目を表示・編集するコントロールを簡単な操作で一括配置してしまいましょう。ダイアログに表示された、すべての項目を選択します。そして、マウスをドラッグして、設計中のフォームの上にドラッグします。すると、次のように、項目名のラベルとデータ型、データ長に対応した編集用のコントロールが配置されます。
図3:表示・編集用のコントロールの配置(クリックで拡大) |
配置されたコントロールを見て気がつくのは、設計中のフォームに、データが表示されていることです。これは、LiveDataというDelphiの特長的な機能の1つで、設計画面でデータベースに接続し、実際のデータを表示してみることができるものです。この機能によって、いちいち実行しなくても、実際のデータに合わせて、コントロールのサイズを調整したり、位置を変更したりできるのです。
なお、表示・編集用のコントロールといっしょに、TDataSourceというコンポーネント(「DataSource1」という名前が付けられています)も配置されています。このコンポーネントは、データセット(この場合は、ClientDataSet1)を各コントロールと結び付ける役割を果たしています。
TDataSourceは、ClientDataSet以外のさまざまなデータセットと結び付けることができます。つまり、表示・編集用のコントロールは、TDataSourceを通じて、異なるデータセットを共通のインターフェースで扱うことができるのです。
最後に、ツールパレットの「Data Controls」カテゴリーから、TDBNavigatorを選択して、フォーム上に配置します。配置したコンポーネント(「DBNavigator1」という名前が付けられています)のプロパティを、次のように設定します。
プロパティ | 値 |
---|---|
DataSource | DataSource1 |
TDBNavigatorは、データベースのレコードを移動させたり、レコードの追加、削除、更新などを行うことができるボタンのセットです。このコンポーネントのDataSourceプロパティを、操作したいデータソース(この場合は、DataSource1)に設定するだけで、データベースのナビゲーションを行う機能を有効にできます。
図4:TDBNavigatorの配置(クリックで拡大) |