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;