dbExpress データセットへのメタデータの取得

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

dbExpress スキーマ情報へのアクセス への移動


データベース サーバーからメタデータを取得して単方向データセットに格納するには、SetSchemaInfo メソッドを使って、必要なデータをまず指定する必要があります。SetSchemaInfo は次の 3 つのパラメータを取ります。

  • 取得するスキーマ情報(メタデータ)の種類: テーブルのリスト(stTables)、システム テーブルのリスト(stSysTables)、ストアド プロシージャのリスト(stProcedures)、テーブルのフィールドのリスト(stColumns)、インデックスのリスト(stIndexes)、ストアド プロシージャで使用されるパラメータのリスト(stProcedureParams)のいずれかです。それぞれの種類の情報では、リスト内の項目を記述するのに使用するフィールド セットが異なります。これらのデータセットの構造の詳細については、「メタデータ データセットの構造」を参照してください。
  • 当てはまるテーブルまたはストアド プロシージャの名前(フィールド、インデックス、ストアド プロシージャ パラメータに関する情報を取得する場合): これら以外の種類のスキーマ情報を取得する場合、このパラメータは nil です。
  • 返される名前に一致するパターン: このパターンは 'Cust%' などの SQL パターンで、ワイルドカードとして '%'(任意の長さの任意の文字列と一致)と '_'(任意の 1 文字と一致)を使用します。パターンの中でパーセントやアンダースコアを文字として使用するには、その文字を 2 つ重ねます(%% または __)。パターンを使用しない場合、このパラメータは nil です。

テーブルに関するスキーマ情報(stTables)を取得する場合、結果として得られるスキーマ情報は、SQL 接続の TableScope プロパティの値に応じて、通常のテーブル、システム テーブル、ビュー、シノニムの任意の組み合わせについてのものになります。

次の呼び出しでは、すべてのシステム テーブル(メタデータが格納されているサーバー テーブル)を列挙するテーブルを要求しています。

SQLDataSet1.SetSchemaInfo(stSysTable, "", "");
SQLDataSet1->SetSchemaInfo(stSysTable, "", "");

SetSchemaInfo の呼び出し後にデータセットを開くと、得られたデータセットにはテーブルごとにレコードが 1 つあり、そのレコードはテーブル名、種類、スキーマ名などを表す列で構成されています。サーバーでメタデータの格納にシステム テーブルを使用しない場合(たとえば MySQL の場合)は、データセットを開いてもレコードはありません。

上記の例では、第 1 パラメータのみ使用しました。今度は、'MyProc' という名前のストアド プロシージャの入力パラメータのリストを取得する場合を考えてみましょう。さらに、ストアド プロシージャのすべてのパラメータ名に、入力パラメータか出力パラメータかを示すプレフィクスが付いているものとします('inName' や 'outValue' など)。この場合は、SetSchemaInfo をたとえば次のように呼び出します。

SQLDataSet1.SetSchemaInfo(stProcedureParams, "MyProc", "in%");
SQLDataSet1->SetSchemaInfo(stProcedureParams, "MyProc", "in%");

得られるデータセットは、各パラメータのプロパティを記述した列で構成される、入力パラメータのテーブルになります。

データセットをメタデータに使用した後でのデータの取得

SetSchemaInfo を呼び出したあと、再び、データセットに対してクエリやストアド プロシージャを実行するには、次の 2 つの方法があります。

  • CommandText プロパティを変更して、データを取得するクエリ、テーブル、ストアド プロシージャのいずれかを指定する。
  • 第 1 パラメータを stNoSchema に設定して、SetSchemaInfo を呼び出す。この場合、データセットは、CommandText の現在値で指定されたデータの取得に戻ります。

関連項目