Goto 系メソッドでの検索の実行
インデックスを使用したレコードの検索 への移動
Goto 系メソッドを使って検索を実行するには:
- 検索に使用するインデックスを指定します。これは、データセット中のレコードをソートするのと同じインデックスです。インデックスを指定するには、IndexName プロパティまたは IndexFieldNames プロパティを使用します。
- データセットを開きます。
- SetKey メソッドを呼び出して、データセットを dsSetKey 状態にします。
- 検索値を Fields プロパティに指定します。Fields は TFields オブジェクトであり、フィールド コンポーネントのインデックス付きリストを保持しています。このフィールド コンポーネントには、列に対応する序数を指定してアクセスすることができます。データセット内の最初の列の番号は 0 です。
- GotoKey または GotoNearest で検索して、一致した最初のレコードに移動します。
たとえば、ボタンの OnClick イベントに実装された次のコードでは、GotoKey メソッドを使用して、インデックス内の最初のフィールドの値が編集ボックスのテキストと完全に一致する最初のレコードに移動します。
procedure TSearchDemo.SearchExactClick(Sender: TObject); begin ClientDataSet1.SetKey; ClientDataSet1.Fields[0].AsString := Edit1.Text; if not ClientDataSet1.GotoKey then ShowMessage('Record not found'); end;
void __fastcall TSearchDemo::SearchExactClick(TObject *Sender) { ClientDataSet1->SetKey(); ClientDataSet1->Fields->Fields[0]->AsString = Edit1->Text; if (!ClientDataSet1->GotoKey()) ShowMessage("Record not found"); }
GotoNearest も同様です。フィールド値の部分文字列に最も近いものを検索します。これは文字列フィールドにのみ使用可能です。以下に例を示します。
Table1.SetKey; Table1.Fields[0].AsString := 'Sm'; Table1.GotoNearest;
Table1->SetKey(); Table1->Fields->Fields[0]->AsString = "Sm"; Table1->GotoNearest();
最初のインデックス付きフィールドの値の最初の 2 文字が "Sm" であるレコードが存在すると、カーソルはそのレコードの位置に移動します。存在しなければ、カーソルの位置は変化せず、GotoNearest は False を返します。