
13 
 
- открыли пустой файл; 
- вызывали TDataSet.Last; 
- как вызов TDataSet.Next не выполняется. 
Единственная  навигационная  процедура,  которая  еще  не  упоминалась - 
MoveBy, которая позволяет переместиться на N записей вперед или назад в таблице. 
Если вы хотите переместиться на две записи вперед, то напишите: 
MoveBy(2); 
И если вы хотите переместиться на две записи назад, то: 
MoveBy(-2); 
При использовании этой функции вы должны всегда помнить, что DataSet - 
это изменяющиеся объекты, и запись, которая была пятой по счету в предыдущий 
момент, теперь может быть четвертой или шестой или вообще может быть удалена. 
Prior и Next - это простые функции, которые вызывают MoveBy. 
MoveTo (i:integer) Перемещение к концу (при i>0) или к началу (при i<0) на i 
записей. 
Любое  перемещение  по  набору,  находящемуся  в  состоянии  dsEdit, 
автоматически вызывает метод Post, который пересылает текущую запись, если она 
была  изменена, в базу  данных. И после  этого  уже  невозможно применить  метод 
Cancel для уничтожения изменений. Поэтому надо принимать меры, чтобы в наборе 
данных, находящемся в состоянии dsEdit, перед любым перемещением происходила 
проверка  правильности  данных,  или  перемещаться  по  набору  в  каком-то  другом 
состоянии (например, в dsBrowse). 
При перемещениях можно совершить ошибку, выйдя за пределы имеющихся 
записей. Например, если вы находитесь на первой записи и выполняете метод Prior, 
то вы  выйдете  за  начало  таблицы,  а  если  вы  находитесь  на  последней  записи  и 
выполняете  метод  Next,  то  вы  окажетесь  после  последней  записи.  Чтобы 
контролировать начало и конец  таблицы, существуют два свойства: EOF (end-of-
file) — конец данных, и BOF (beginning of file) — начало данных. Эти  свойства 
становятся  равными  true,  если  делается  попытка  переместить  курсор 
соответственно за пределы последней или первой записи, а также после выполнения 
методов соответственно Last и First. 
Приведем пример. Пусть в вашем приложении имеется выпадающий список с 
именем  CBdep,  который вы  хотите заполнить  данными,  содержащимися  в  полях 
Dep всех записей таблицы, соединенной с компонентом Tablel. Это можно сделать 
следующим кодом: 
CBdep.Clear; 
Tablel.First; 
while not Tablel.EOF do 
begin 
CBdep.Items.Add(Tablel.FieldByName{'dep').AsString); 
Tablel.Next;