メタデータのクエリ(FireDAC)
メタデータの操作(FireDAC) への移動
TFDConnection の使用
TFDConnection には、以下のように、データベース オブジェクト名のリストを返す GetXxxxNames("Xxxx" の部分がそれぞれ異なる)という使いやすい一連のメソッドが用意されています。
- GetCatalogNames - カタログ リスト
- GetSchemaNames - スキーマ リスト
- GetTableNames - テーブルおよびビュー リスト
- GetFieldNames - テーブル フィールド リスト
- GetKeyFieldNames - テーブル主キー リスト
- GetGeneratorNames - ジェネレータ/シーケンス リスト
- GetPackageNames - パッケージ リスト
- GetStoredProcNames - ストアド プロシージャ リスト
これらのメソッドが役に立つのは以下のような場合です。
- アプリケーションでオブジェクト名が必要になる。
- アプリケーションでは、これらのオブジェクトに関するそれ以上の情報は必要ない。
たとえば、GetTableNames メソッドでは、現在のデータベースおよびスキーマからテーブル名、ビュー名、シノニム名を取得します。これを呼び出すには、以下のようなコードを使用します。
FDConnection1.GetTableNames('Northwind', 'dbo', '', Memo1.Lines);
ACatalogName 引数や ASchemaName 引数を使用すると、返されるリストを指定のカタログやスキーマに制限することができます。これらを指定しない場合は、現在のデータベース/スキーマに含まれているすべての "可視" オブジェクトまたはすべてのオブジェクトが返されます。どちらになるかは DBMS によります。なお、一部の DBMS(たとえば Microsoft Access など)では、スキーマ/カタログが指定され、それが DBMS でサポートされていない場合は、エラーが返される可能性があります。
さらに、アプリケーションでは、AScopes 引数を使って、オブジェクトのリストをオブジェクトのスコープに基づいて制限することもできます。APattern 引数(LIKE 検索のマスク)はオブジェクト名に適用されます。
TFDCustomManager クラスにも似たメソッドがあります。
詳細については、FireDAC デモ(FireDAC\Samples\Comp Layer\TFDConnection\GetFieldNames)を参照してください。
TFDMetaInfoQuery の使用
TFDMetaInfoQuery は、メタデータ リストのクエリおよび閲覧を可能にするデータセット コンポーネントです。クエリや閲覧を行うには、Connection と MetaInfoKind、さらにオプションで CatalogName、SchemaName、BaseObjectName、ObjectName の各プロパティを設定し、データセットを開きます。テーブル リストを取得するには、以下のようなコードを使用します。
FDMetaInfoQuery1.Connection := FDConnection1;
FDMetaInfoQuery1.MetaInfoKind := mkTables;
FDMetaInfoQuery1.Open;
データセット構造については、「メタデータ構造」トピックを参照してください。DBMS で特定のメタデータ型をサポートしていない場合(たとえば、SQL Server では mkGenerators をサポートしていません)、空のデータセットが返されます。メタデータ データセットは読み取り専用で、編集することはできません。
メタデータ キャッシング
取得されたメタデータは、接続ごとに FireDAC によりキャッシュされます。それは、fiMeta を FetchOptions.Cache に含めることで制御されます。
FetchOptions.Cache から fiMeta を除いても、メタデータ キャッシュは無効にはなりません。キャッシュされたすべてのメタデータは、次に使用されるまで、キャッシュにそのまま残ります。指定したオブジェクトのメタデータ キャッシュまたはメタデータ キャッシュ全体を更新するには、TFDConnection.RefreshMetadataCache を使用します。
現在のカタログとスキーマ
現在のカタログ名とスキーマ名を取得するには、TFDConnection.ConnectionIntf.CurrentCatalog and CurrentSchema を使用します。現在のカタログまたはスキーマを変更するには、これらのプロパティに新しい値を割り当てます。
MetaCurCatalog と MetaCurSchema を使用すると、データベース セッションから返される情報をオーバーライドできます。一部のデータベースについては、正しい値を指定するために、これらのパラメータを使用しなければならない可能性があります。API が間違った値を返すからです。