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 の現在値で指定されたデータの取得に戻ります。