dBASE インデックス ファイルの指定

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

BDE 対応データセットの利用:インデックス への移動

メモ: ボーランド データベース エンジン(BDE)の使用は推奨されません。今後 BDE は機能拡張されません。たとえば、BDE では Unicode がサポートされていません。BDE を使用して新たに開発しないことをお勧めします。既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。

インデックスを指定するには、ほとんどのサーバーの場合、テーブルタイプのすべてのデータセットに共通するメソッドを使用します。これらのメソッドは、「インデックスを持つレコードのソート」で説明されています。

しかし、非プロダクションインデックスファイルを使用する dBASE テーブルの場合、あるいは dBASE III PLUS スタイルのインデックス(*.NDX)の場合は、上記の方法ではなく、IndexFiles プロパティと IndexName プロパティを使ってインデックスを指定しなければなりません。IndexFiles プロパティで非プロダクションインデックスファイルの名前を設定するか、.NDX ファイルのリストを表示します。次に、IndexName プロパティでインデックスを 1 つ指定します。これにより、インデックスをベースにしてデータセットを有効にソートできます。

設計時に、オブジェクトインスペクタIndexFiles プロパティの値列にある省略記号ボタンをクリックして、インデックスファイルエディタを呼び出します。非プロダクションインデックスファイルまたは .NDX ファイルを追加するには、[インデックスファイル]ダイアログで[追加]ボタンをクリックして、[開く]ダイアログで目的のファイルを選択します。1 回の操作で選択できる非プロダクションインデックスファイルまたは .NDX ファイルは 1 つだけです。目的のインデックスをすべて追加したら、[インデックスファイル]ダイアログの[OK]をクリックします。

これと同じ操作は、実行時にプログラムで行うことができます。それには、文字列リストのプロパティとメソッドを使って IndexFiles プロパティにアクセスします。新しいインデックスを追加する場合は、まずテーブルの IndexFiles プロパティの Clear メソッドを呼び出して、既存のエントリをすべて削除します。追加する非プロダクションインデックスファイルまたは .NDX ファイル 1 つに対して Add メソッドを 1 回ずつ呼び出します。

with Table2.IndexFiles do begin
  Clear;
  Add('Bystate.ndx');
  Add('Byzip.ndx');
  Add('Fullname.ndx');
  Add('St_name.ndx');
end;
Table2->IndexFiles->Clear();
Table2->IndexFiles->Add("Bystate.ndx");
Table2->IndexFiles->Add("Byzip.ndx");
Table2->IndexFiles->Add("Fullname.ndx");
Table2->IndexFiles->Add("St_name.ndx");

目的の非プロダクションインデックスファイルまたは .NDX ファイルを追加すると,そのインデックスファイル内の個々のインデックスの名前が利用可能になり、その名前を IndexName プロパティに代入できます。インデックスタグのリストを取り出すこともできます。それには、GetIndexNames メソッドを使用するか、IndexDefs プロパティで TIndexDef オブジェクトを使ってインデックス定義を調べます。.NDX ファイルを適切にリストしておけば、テーブル内でのデータの追加,変更、削除に応じて自動的に .NDX ファイルが更新されます(IndexName プロパティでインデックスを指定したかどうかを問わない)。

下の例では、テーブルコンポーネント AnimalsTableIndexFiles プロパティを非プロダクションインデックスファイル ANIMALS.MDX に設定し、IndexName プロパティを「NAME」というインデックスタグに設定しています。

AnimalsTable.IndexFiles.Add('ANIMALS.MDX');
AnimalsTable.IndexName := 'NAME';
AnimalsTable->IndexFiles->Add("ANIMALS.MDX");
AnimalsTable->IndexName = "NAME";

インデックスファイルの指定が終了すると、非プロダクションインデックスや .NDX インデックスは、ほかのインデックスと同様に機能します。インデックス名を指定すると、テーブル内のデータがソートされ、検索、範囲指定、およびマスター/詳細リンク(非プロダクションインデックス場合)の各操作をインデックスに基づいて行えます。インデックスをこれらの用途に使用する方法については、「テーブルタイプのデータセットの使い方」を参照してください。

TTable コンポーネントで dBASE III PLUS スタイルの .NDX インデックスを使用する場合は、次の 2 点に注意する必要があります。第 1 に、.NDX ファイルをマスター/詳細リンクのベースとして使用することはできません。第 2 に、IndexName プロパティで .NDX インデックスをアクティブにするとき、インデックス名として設定するプロパティ値に拡張子 .NDX を含めなければなりません。

with Table1 do begin
  IndexName := 'ByState.NDX';
  FindKey(['CA']);
end;
Table1->IndexName = "ByState.NDX";
TVarRec vr = ("NE");
Table1->FindKey(&vr, 0);

関連項目