Utilisation des propriétés Eof et Bof

De RAD Studio
Aller à : navigation, rechercher

Remonter à Navigation dans les ensembles de données


Les deux propriétés Eof (fin de fichier) et Bof (début de fichier), accessibles en lecture et à l'exécution uniquement, sont utiles pour parcourir tous les enregistrements d'un ensemble de données.

Eof

Quand la valeur de EOF est True, cela indique que le curseur se trouve sans équivoque sur la dernière ligne de l'ensemble de données. Eof passe à True quand une application :

  • Ouvre un ensemble de données vide.
  • Appelle la méthode Last de l'ensemble de données.
  • Appelle la méthode Next de l'ensemble de données et que son exécution échoue (car le curseur se trouve déjà sur la dernière ligne de l'ensemble de données).
  • Appelle SetRange sur une portée ou un ensemble de données vide.

Eof vaut False dans tous les autres cas ; vous devez supposer que Eof vaut False sauf si l'une des conditions ci-dessus est vérifiée et si vous avez testé directement la valeur de la propriété.

Le test sur Eof se fait généralement dans une condition de boucle pour contrôler le processus itératif sur tous les enregistrements d'un ensemble de données. Si vous ouvrez un ensemble de données contenant plusieurs enregistrements (ou si vous appelez First) Eof vaut False. Pour parcourir un à un les enregistrements d'un ensemble de données, vous devez créer une boucle qui avance sur chaque enregistrement en appelant Next, et se termine quand Eof vaut True. Eof reste à False jusqu'à ce que vous appeliez Next alors que le curseur se trouve déjà sur le dernier enregistrement.

L'exemple suivant montre l'une des façons de programmer une boucle de traitement d'enregistrements pour un ensemble de données appelé CustTable :


CustTable.DisableControls;
try
  CustTable.First; { Se positionne sur le premier enregistrement ; Eof devient False }
  while not CustTable.Eof do { boucle jusqu'à ce que Eof devienne true }
  begin
    { Traiter chaque enregistrement ici }
    .
    .
    .
    CustTable.Next; { Eof vaut false en cas de réussite; Eof vaut True si Next échoue sur le dernier enregistrement}
  end;
finally
  CustTable.EnableControls;
end;
CustTable->DisableControls(); // accélère le traitement et empêche les rafraîchissements écran
try
{
  while (!CustTable->Bof) // boucle jusqu'à ce que Bof devienne true
  (
    //Traiter chaque enregistrement ici
    .
    .
    .
    CustTable->Prior();
    // Bof vaut false en cas de réussite ; bof vaut true si Prior échoue sur le premier enregistrement
  }
}
__finally
{
  CustTable->EnableControls();
}
CustTable->DisableControls();
try
{
  for (CustTable->First(); !CustTable->Eof; CustTable->Next())
  (
    //Traiter chaque enregistrement ici
    .
    .
    .
  }
}
__finally
{
  CustTable->EnableControls();
}


Conseil :  Cet exemple montre aussi comment désactiver puis réactiver des contrôles visuels, orientés données, rattachés à l'ensemble de données. Si vous désactivez les contrôles visuels pendant la durée de l'itération sur l'ensemble de données, le traitement sera accéléré car votre application n'a pas à mettre à jour le contenu des contrôles au fur et à mesure de l'évolution de l'enregistrement en cours. Une fois l'itération achevée, les contrôles doivent être réactivés pour être mis à jour en fonction de la nouvelle ligne en cours. Notez que l'activation de contrôles visuels a lieu dans la clause finally d'une instruction try...finally. Cela garantit que les contrôles ne resteront pas désactivés, même si une exception termine le traitement de la boucle de façon prématurée.

Bof

Quand la valeur de BOF est True, cela indique que le curseur se trouve sans équivoque sur la première ligne de l'ensemble de données. Bof passe à True quand une application :

  • Ouvre un ensemble de données.
  • Appelle la méthode First d'un ensemble de données.
  • Appelle la méthode Prior de l'ensemble de données et que son exécution échoue car le curseur se trouve déjà sur la première ligne de l'ensemble de données
  • Appelle SetRange sur une portée ou un ensemble de données vide.

Bof vaut False dans tous les autres cas ; vous devez supposer que Bof vaut False sauf si l'une des conditions ci-dessus est vérifiée et si vous avez testé directement la valeur de la propriété.

Comme EOF, Bof peut se trouver dans une condition de boucle pour contrôler un processus itératif sur des enregistrements d'un ensemble de données. L'exemple suivant montre l'une des façons de programmer une boucle de traitement d'enregistrements pour un ensemble de données appelé CustTable :


CustTable.DisableControls; { accélère le traitement et empêche les rafraîchissements écran }
try
  while not CustTable.Bof do { boucle jusqu'à ce que Bof devienne true }
  begin
    { Traiter chaque enregistrement ici }
    .
    .
    .
    CustTable.Prior; { Bof vaut false en cas de réussite; Bof vaut True si Prior échoue sur le premier enregistrement }
  end;
finally
  CustTable.EnableControls; { affiche la nouvelle ligne en cours dans les contrôles }
end;


Voir aussi