Разработка баз данных в Delphi. 11 Уроков



         

 Открытие и закрытие DataSet - часть 4


        Следующий код показывает самый общий пример использования Prior, когда Вы попадаете к началу a файла:

while not Table.Bof do begin

  DoSomething;

  Table1.Prior;

end;

В коде, показанном здесь, гипотетическая функция DoSomething будет вызвана сперва на текущей записи и затем на каждой следующей записи (от текущей и до начала таблицы). Цикл будет продолжаться до тех пор, пока вызов Table1.Prior не сможет больше переместить Вас на предыдущую запись в таблице. В этот момент BOF вернет True и программа выйдет из цикла. (Чтобы оптимизировать вышеприведенный код, установите DataSource1.Enabled в False перед началом цикла, и верните его в True после окончания цикла.)

          Все сказанное относительно BOF также  применимо и к EOF. Другими словами, код, приведенный ниже показывает простой способ пробежать по всем записям в a dataset:

Table1.First;

while not Table1.EOF do begin

  DoSomething;

  Table1.Next;

end;

Классическая ошибка в случаях, подобных этому: Вы входите в цикл while или repeat, но забываете вызывать Table1.Next:

Table1.First;

repeat

  DoSomething;

until Table1.EOF;

Если Вы случайно написали такой код, то ваша машина зависнет. Также, этот код мог бы вызвать проблемы, если Вы открыли пустую таблицу. Так как здесь используется цикл repeat, DoSomething был бы вызван один раз, даже если бы нечего было обрабатывать. Поэтому, лучше использовать цикл while вместо repeat в ситуациях подобных этой.

EOF возвращает True в следующих трех случаях:

·        После того, как Вы открыли пустой файл;

·        После того, как Вы вызывали TDataSet.Last;

·        После того, как вызов TDataSet.Next не выполняется.

Единственная навигационная процедура, которая еще не упоминалась - MoveBy, которая позволяет Вам переместиться на N записей  вперед или назад в таблице. Если Вы хотите переместиться на две записи вперед, то напишите:

MoveBy(2);

И если Вы хотите  переместиться на две записи назад, то:

MoveBy(-2);

При использовании этой функции Вы должны всегда помнить, что DataSet - это изменяющиеся объекты, и запись, которая была пятой по счету в предыдущий момент, теперь может быть четвертой или шестой или вообще может быть удалена...                                                           

Prior и Next - это простые функции, которые вызывают MoveBy.




Содержание  Назад  Вперед