データセットの種類

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

データセットの理解:インデックス への移動

TDataSet の下位オブジェクトの使い方」では,TDataSet の下位オブジェクトを,データにアクセスするために使用する方式によって分類しています。TDataSet の下位オブジェクトを分類するうえで役立つもう 1 つの方法は,それらが表すサーバーデータの種類を考慮に入れることです。この点からすると,データセットは基本的に 3 種類に分類できます。

テーブルタイプのデータセット:データベースサーバーの単一のテーブルを表し,その行と列全体を含みます。テーブルタイプのデータセットには,Bde.DBTables.TTableADOdb.TADOTableSQLExpr.TSQLTableIBX.IBTable.TIBTable があります。

テーブルタイプのデータセットでは,サーバー上で定義されたインデックスを利用できます。データベーステーブルとデータセットは 1 対 1 に対応しているので,データベーステーブル用に定義されたサーバーインデックスを使用することができます。インデックスを使用すれば,アプリケーションで,テーブルのレコードのソート,スピードサーチおよびルックアップを行うことが可能になります。また,マスター/詳細関係の基礎ともなります。いくつかのテーブルタイプのデータセットでは,データセットとデータベーステーブルの 1 対 1 関係を利用して,データベーステーブルの作成や削除のような,テーブルレベルの操作を可能にしています。

問い合わせタイプのデータセット:単一の SQL コマンド,つまり問い合わせを表します。問い合わせは,コマンド(典型的には SELECT 文)の実行の結果セットを表すことができます。また,レコードを返さないコマンドを実行することもできます(UPDATE 文など)。問い合わせタイプのデータセットには,Bde.DBTables.TQueryADOdb.TADOQuerySQLExpr.TSQLQueryIBX.IBQuery.TIBQuery があります。

問い合わせタイプのデータセットを効果的に使用するには,SQL とサーバーの SQL 実装の詳細(SQL-92 標準に対する機能拡張や制約など)をよく知っていなければなりません。SQL を扱うのが初めての方は,SQL を詳細に解説した市販の解説書を参照してください。「Understanding the New SQL: A Complete Guide」(Jim Melton,Alan R.Simpson 共著,Morgan Kaufmann Publishers)は好著の 1 つです。

ストアドプロシージャタイプのデータセット:データベースサーバー上のストアドプロシージャを表します。ストアドプロシージャタイプのデータセットにはBde.DBTables.TStoredProcADOdb.TADOStoredProcSQLExpr.TSQLStoredProcIBX.IBStoredProc.TIBStoredProc があります。

ストアドプロシージャは,使用されるデータベースシステム固有のプロシージャ/トリガ言語で書かれた自己包含型のプログラムです。通常は,頻繁に繰り返されるデータベース関連のタスクを行うもので,多数のレコード上での操作や,集計関数や算術関数を使用する操作で特に有効です。一般にストアドプロシージャを使用すると,次の点でデータベースアプリケーションの処理効率が改善されます。

  • サーバーの大きな処理能力と速度を利用する
  • 処理をサーバーに移動することにより,ネットワークトラフィックを減少させる

ストアドプロシージャには,データを返すものと返さないものがあります。データを返すストアドプロシージャにも,1 つのカーソルを返すもの(SELECT 問い合わせの結果に類似),複数のカーソルを返すもの(事実上複数のデータセットを返す),出力パラメータでデータを返すものがあります。これは,一部にはサーバーの違いによるものです。ストアドプロシージャでデータを返せないサーバーや,出力パラメータだけを使用できるサーバーがあります。ストアドプロシージャをまったくサポートしないサーバーもあります。実際に何が利用できるかは,サーバーのドキュメントを参照してください。

メモ:  通常は,問い合わせタイプのデータセットを使用して,ストアドプロシージャを実行することができます。ほとんどのサーバーが,ストアドプロシージャを扱う SQL の拡張を提供しているからです。ただし,そのために使用する構文はサーバーごとに異なります。ストアドプロシージャタイプのデータセットのかわりに問い合わせタイプのデータセットを使用する場合は,サーバーのドキュメントを参照して,構文を確認してください。

TDataSet には,この 3 つのカテゴリのいずれかにきちんと収まるデータセットのほかに,複数のカテゴリにまたがる下位オブジェクトもあります。

  • ADOdb.TADODataSetSQLExpr.TSQLDataSet には CommandType プロパティがあり,テーブル,問い合わせ,ストアドプロシージャのどれを表すかを指定することができます。TADODataSet は,テーブルタイプのデータセットのようにインデックスを指定できますが,プロパティとメソッドの名前は問い合わせタイプのデータセットに似ています。
  • Datasnap.DBClient.TClientDataSet は,別のデータセットからのデータを表します。そのため,テーブル,問い合わせ,ストアドプロシージャのいずれをも表すことができます。TClientDataSet の動作は,テーブルタイプのデータセットに最も似ています。インデックスをサポートしているからです。しかし,問い合わせおよびストアドプロシージャの一部の機能も持っています。パラメータの管理と,結果セットを取得せずに実行する機能です。
  • ほかのいくつかのクライアントデータセットには CommandType プロパティがあり,テーブル,問い合わせ,ストアドプロシージャのどれを表すかを指定することができます。プロパティとメソッド名は TClientDataSet のものに似ています。その中には,パラメータのサポート,インデックス,および結果セットを取得せずに実行する機能が含まれます。
  • IBX.IBCustomDataSet.TIBDataSet は問い合わせとストアドプロシージャの両方を表すことができます。実際のところ,同時に複数の問い合わせとストアドプロシージャを表し,それぞれに対して別個のプロパティを持つことができます。

関連項目