Eof プロパティと Bof プロパティの使用

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

データセット内の移動 への移動


読み取り専用の実行時プロパティである Eof(ファイルの終わり)と Bof(ファイルの始まり)の 2 つは、データセット内のすべてのレコードを反復処理する場合に役に立ちます。

Eof

EofTrue の場合は、カーソルがデータセットの最後の行にあることを示しています。EofTrue に設定されるのは、アプリケーションで次のいずれかを行ったときです。

  • 空のデータセットを開く。
  • データセットの Last メソッドを呼び出す。
  • データセットの Next メソッドを呼び出すものの、(カーソルが現在、データセットの最後の行にあるため)メソッドが失敗する。
  • 空の範囲または空のデータセットに対して SetRange を呼び出す。

上記の場合以外では、Eof は必ず False に設定されます。上記の条件のいずれかが満たされていて、かつ、プロパティを直接検査する場合を除き、EofFalse であると仮定しなければなりません。

Eof は、データセット内の全レコードの反復処理を制御するためにループ条件でよく検査されます。レコードを含んでいるデータセットを開く(または First メソッドを呼び出す)と、EofFalse になります。データセットを 1 レコードずつ反復処理するには、Next を呼び出してレコードを 1 つずつ進め、EofTrue になると終了するように、ループを作成します。カーソルが既に最後のレコードにある場合は、Next を呼び出すまで EofFalse のままです。

次のコードでは、CustTable というデータセットのレコード処理ループのコーディング方法の一例を示しています。

CustTable.DisableControls;
try
  CustTable.First; { Go to first record, which sets Eof False }
  while not CustTable.Eof do { Cycle until Eof is True }
  begin
    { Process each record here }
    .
    .
    .
    CustTable.Next; { Eof False on success; Eof True when Next fails on last record }
  end;
finally
  CustTable.EnableControls;
end;
CustTable->DisableControls(); // Speed up processing; prevent screen flicker
try
{
  while (!CustTable->Bof) // Cycle until Bof is true
  (
    // Process each record here
    .
    .
    .
    CustTable->Prior();
    // Bof false on success; Bof true when Prior fails on first record
  }
}
__finally
{
  CustTable->EnableControls();
}
CustTable->DisableControls();
try
{
  for (CustTable->First(); !CustTable->Eof; CustTable->Next())
  (
    // Process each record here
    .
    .
    .
  }
}
__finally
{
  CustTable->EnableControls();
}

ヒント: 上記の例では、データセットに関連付けられたデータ対応ビジュアル コントロールの有効/無効を切り替える方法も示しています。データセットの反復処理中にビジュアル コントロールを無効にした場合、アプリケーションでは、現在のレコードが変わってもコントロールの内容を更新する必要がないので、処理速度が向上します。反復処理が完了したら、コントロールを再び有効にして、それらの内容を新しい現在行の値に更新しなければなりません。ビジュアル コントロールの有効化は try...finally 文の finally 節で行われている点に注意してください。このようにすることで、たとえ例外が発生してループ処理が途中で終わっても、コントロールが無効のままになることはありません。

Bof

BofTrue の場合は、カーソルがデータセットの最初の行にあることを示しています。BofTrue に設定されるのは、アプリケーションで次のいずれかを行ったときです。

  • データセットを開く。
  • データセットの First メソッドを呼び出す。
  • データセットの Prior メソッドを呼び出すものの、(カーソルが現在、データセットの最初の行にあるため)メソッドが失敗する。
  • 空の範囲または空のデータセットに対して SetRange を呼び出す。

上記の場合以外では、Bof は必ず False に設定されます。上記の条件のいずれかが満たされていて、かつ、プロパティを直接検査する場合を除き、BofFalse であると仮定しなければなりません。

Eof と同様に、Bof は、データセット内のレコードの反復処理を制御するためにループ条件で使用することができます。次のコードでは、CustTable というデータセットのレコード処理ループのコーディング方法の一例を示しています。

CustTable.DisableControls; { Speed up processing; prevent screen flicker }
try
  while not CustTable.Bof do { Cycle until Bof is True }
  begin
    { Process each record here }
    .
    .
    .
    CustTable.Prior; { Bof False on success; Bof True when Prior fails on first record }
  end;
finally
  CustTable.EnableControls; { Display new current row in controls }
end;

関連項目