TIBExtractコンポーネントを使うと、テーブルやビューなどのメタデータを取り出すことができます。
TIBExtractのExtractObjectメソッドで取り出すメタデータを指定します。
//すべてのメタデータを取り出す
IBExtract1->ExtractObject(eoDatabase);
//すべてのテーブルのメタデータを取り出す
IBExtract1->ExtractObject(eoTable);
//テーブル"TBL1"のメタデータを取り出す
IBExtract1->ExtractObject(eoTable, "TBL1");
■テーブルのメタデータを取り出すサンプルプログラム
Firebirdでテーブルを作成します。
CREATE TABLE TBL1 (
COL1 INTEGER PRIMARY KEY,
COL2 INTEGER NOT NULL,
COL3 VARCHAR(100)
);
C++BuilderでTIBDatabase、TIBTransaction、TIBExtract、TMemo、TButtonコンポーネントを配置します。

TButtonコンポーネントのClickイベントを追加します。
//各コンポーネントのDatabaseプロパティとTransactionプロパティを設定します。
IBDatabase1->DefaultTransaction = IBTransaction1;
IBTransaction1->DefaultDatabase = IBDatabase1;
IBExtract1->Database = IBDatabase1;
IBExtract1->Transaction = IBTransaction1;
//Firebirdに接続します。
IBDatabase1->DatabaseName = FileName; //FDBファイルのパス
IBDatabase1->LoginPrompt = false;
IBDatabase1->Params->Clear();
IBDatabase1->Params->Add("user_name=sysdba"); //ユーザー名
IBDatabase1->Params->Add("password=masterkey"); //パスワード
IBDatabase1->Params->Add("lc_ctype=UNICODE_FSS"); //文字コード
IBDatabase1->Connected = true;
//メタデータを取り出し、メモコンポーネントに出力します。
IBExtract1->ExtractObject(eoTable, "TBL1");
Memo1->Lines->Text = IBExtract1->Items->Text;
//切断します。
IBDatabase1->Close();
実行したところ

■テーブルをコピーするサンプルプログラム
取り出したメタデータを編集して、同じフィールドを持つ別名のテーブルを作成します。
※Firebird-jp-generalメーリングリストの「Re: テーブルのコピーについて」の投稿を参考にしました。
Firebirdでテーブルを作成します。
CREATE TABLE "TBL1" (
COL1 INTEGER PRIMARY KEY,
COL2 INTEGER NOT NULL,
COL3 VARCHAR(100)
);
C++BuilderでTIBDatabase、TIBTransaction、TIBExtract、TIBSQL、TMemo、TButtonコンポーネントを配置します。

TButtonコンポーネントのClickイベントを追加します。
//各コンポーネントのDatabaseプロパティとTransactionプロパティを設定します。
IBDatabase1->DefaultTransaction = IBTransaction1;
IBTransaction1->DefaultDatabase = IBDatabase1;
IBExtract1->Database = IBDatabase1;
IBExtract1->Transaction = IBTransaction1;
IBSQL1->Database = IBDatabase1;
IBSQL1->Transaction = IBTransaction1;
//Firebirdに接続します。
IBDatabase1->DatabaseName = FileName; //FDBファイルのパス
IBDatabase1->LoginPrompt = false;
IBDatabase1->Params->Clear();
IBDatabase1->Params->Add("user_name=sysdba"); //ユーザー名
IBDatabase1->Params->Add("password=masterkey"); //パスワード
IBDatabase1->Params->Add("lc_ctype=UNICODE_FSS"); //文字コード
IBDatabase1->Connected = true;
//トランザクションを開始します
IBTransaction1->StartTransaction();
UnicodeString OldTable = "TBL1"; //コピー元のテーブル名
UnicodeString NewTable = "TBL2"; //新しいテーブル名
//コピー元のテーブルのメタデータを取得します
IBExtract1->ExtractObject(eoTable, OldTable);
//新しいテーブルを作成するSQLを組み立てます
IBSQL1->SQL->Text = StringReplace(
IBExtract1->Items->Text, "\"" + OldTable + "\"", "\"" + NewTable + "\"",
TReplaceFlags() << rfReplaceAll << rfIgnoreCase);
//SQLを実行します
IBSQL1->ExecQuery();
//コミットします
IBTransaction1->Commit();
//作成したテーブルのメタデータを確認します
IBExtract1->ExtractObject(eoTable, NewTable);
Memo1->Lines->Text = IBExtract1->Items->Text;
//切断します。
IBDatabase1->Close();
実行したところ
