表示: Delphi C++
表示設定

Eof プロパティと Bof プロパティ

提供:RAD Studio XE2
移動: 案内, 検索

データセットについて:インデックス への移動

読み出し専用の実行時のプロパティとして,Eof(ファイルの終わり)と Bof(ファイルの始まり)という 2 つのプロパティがあります。この 2 つのプロパティはデータセット内のすべてのレコードを繰り返し処理するときなどに便利です。

Eof

EOF プロパティが True のとき,カーソルはデータセットの最後の行にあります。EofTrue に設定されるのは,アプリケーションが以下の動作を行ったときです。

  • 空のデータセットを開いた
  • データセットの Last メソッドを呼び出した
  • データセットの Next メソッドを呼び出したが,データセットの最後の行にカーソルがあったためにメソッドが失敗した
  • 空の範囲またはデータセットで SetRange を呼び出した

上記の場合以外では,Eof プロパティは必ず False になります。したがって,上記の条件が満たされていない場合,およびプロパティを直接テストしていない場合は,EofFalse であると想定する必要があります。

Eof プロパティは,データセットのすべてのレコードの繰り返し処理を制御するためにループ条件でよくテストします。レコードの入ったデータセットを開いたり First メソッドを呼び出すと,EofFalse になります。1 レコードずつデータセット全体の繰り返し処理をするには,Next を呼び出してレコードを 1 つずつ進め,EofTrue になるとループが終了するようにループを作成します。カーソルがすでに最後のレコードにある場合は,Next を呼び出すまで EofFalse のままです。

次のコードは,CustTable というデータセットのレコード処理ループのコード記述方法の 1 つを示しています。



 CustTable.DisableControls;
 try
   CustTable.First; { 最初のレコードに移動する。その結果,EOF は false になる }
   while not CustTable.Eof do { EOF が True になるまで繰り返す }
   begin
     { ここで各レコードを処理する }
     .
     .
     .
     CustTable.Next; { 成功すると EOF は false になる。最後のレコードで Next が失敗すると EOF は true になる }
   end;
 finally
   CustTable.EnableControls;
 end;



 CustTable->DisableControls(); // 画面描画を止めることで処理速度を上げ,ちらつきをさける
 try
 {
   while (!CustTable->Bof) // BOF が true になるまで繰り返す
   {
     // ここで各レコードを処理する
     .
     .
     .
     CustTable->Prior();
     // 成功した場合には Bof は false になる。最初のレコードに対して Prior を呼ぶと失敗し,Bof は true になる
   }
 }
 __finally
 {
   CustTable->EnableControls();
 }



 CustTable->DisableControls();
 try
 {
   for (CustTable->First(); !CustTable->Eof; CustTable->Next())
   (
     // ここで各レコードを処理する
     .
     .
     .
   }
 }
 __finally
 {
   CustTable->EnableControls();
 }


ヒント:  上記の例では,データセットに結び付けられたデータベース対応ビジュアルコントロールの使用可/不可を切り替える方法も示しています。データセットの反復の間,ビジュアルコントロールを使用不可にすると,現在のレコードが変わってもアプリケーションがコントロールの内容を更新しないで済むので,処理が高速化されます。すべての処理が完了したら,コントロールを再び使用可能にすることで,最新の現在行の値に更新させることを忘れないでください。ビジュアルコントロールは try...finally 文の finally 節で使用可能にしている点に注意してください。この位置で使用可能にしておくと,たとえ処理中に例外が発生し,繰り返し処理が未完了で終わってもコントロールが使用不可のままになることを回避できます。

Bof

BOF プロパティが True のとき,カーソルはデータセットの先頭の行にあります。BofTrue に設定されるのは,アプリケーションが以下の動作を行ったときです。

  • データセットを開いた直後
  • データセットの First メソッドを呼び出した
  • データセットの Prior メソッドを呼び出したが,データセットの最初の行にカーソルがあったためにメソッドが失敗した
  • 空の範囲またはデータセットで SetRange を呼び出した

上記の場合以外では,Bof プロパティは必ず False になります。したがって,上記の条件が満たされていない場合,およびプロパティを直接テストしていない場合は,BofFalse であると想定する必要があります。

EOF と同様に Bof もループ条件に入ってデータセットのレコードの繰り返し処理を制御できます。次のコードは,CustTable というデータセットのレコード処理ループのコード記述方法の 1 つを示しています。



 CustTable.DisableControls; { 画面描画を止めることで処理速度を上げ,ちらつきをさける }
 try
   while not CustTable.Bof do { BOF が True になるまで繰り返す }
   begin
     { ここで各レコードを処理する }
     .
     .
     .
     CustTable.Prior; { 成功した場合には Bof は false になる。最初のレコードに対して Prior を呼ぶと失敗し,Bof は true となる }
   end;
 finally
   CustTable.EnableControls; { 新しい現在行を表示する }
 end;



関連項目

以前のバージョン
他言語版