КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Навигация (Перемещение по записям)
После открытия таблицы следующим шагом Вы должны узнать как перемещаться по записям внутри него. Следующий обширный набор методов и свойства TDataSet обеспечивают все, что Вам нужно для доступа к любой конкретной записи внутри таблицы: procedure First; procedure Last; procedure Next; procedure Prior; property BOF: Boolean read FBOF; property EOF: Boolean read FEOF; procedure MoveBy(Distance: Integer); Дадим краткий обзор их функциональных возможностей: Вызов Table1.First перемещает Вас к первой записи в таблице. · Table1.Last перемещает Вас к последней записи. · Table1.Next перемещает Вас на одну запись вперед. · Table1.Prior перемещает Вас на одну запись назад. · Вы можете проверять свойства BOF или EOF, чтобы понять, находитесь ли Вы в начале или в конце таблицы. ·Процедура MoveBy перемещает Вас на N записей вперед или назад в таблице. Нет никакого функционального различия между запросом Table1.Next и вызовом Table1.MoveBy(1). Аналогично, вызов Table1.Prior имеет тот же самый результат, что и вызов Table1.MoveBy(-1). Чтобы начать использовать эти навигационные методы, Вы должны поместить TTable, TDataSource и TDBGrid на форму. Присоедините DBGrid1 к DataSource1 и DataSource1 к Table1. Затем установите свойства таблицы: 1. В DatabaseName имя подкаталога (или псевдоним, в нашем случае – это Example); 2. В TableName установите имя таблицы Example. Если Вы запустили программу, которая содержит видимый элемент TDBGrid, то увидите, что можно перемещаться по записям таблицы с помощью полос прокрутки (scrollbar) на нижней и правой сторонах DBGrid. Однако иногда нужно перемещаться по таблице “программным путем”, без использования возможностей, встроенных в визуальные компоненты. В следующих нескольких абзацах объясняется как можно это сделать. Поместите две кнопки на форму и назовите их «Предыдущий» и «Следующий», как показано на рис. 1.3. Рис. 1.3. Кнопки «Предыдущий» и «Следующий» позволяют Вам перемещаться по БД Дважды щелкните на кнопке «Следующий» - появится заготовка обработчика события:
procedure TForm1.NextClick(Sender: TObject); begin end;
Теперь добавьте одну строчку кода так, чтобы процедура выглядела так:
procedure TForm1.NextClick(Sender: TObject); begin Table1.Next; end; Повторите те же самые действия с кнопкой «Предыдущий» так, чтобы функция связанная с ней выглядела так:
procedure TForm1.PriorClick(Sender: TObject); begin Table1.Prior; end;
Теперь запустите программу и нажмите на кнопки. Вы увидите, что они легко позволяют Вам перемещаться по записям в таблице. Теперь добавьте еще две кнопки и назовите их «На первую запись» и «На последнюю запись», как показано на рис. 1.4. Сделайте то же самое для новых кнопок.
procedure TForm1.FirstClick(Sender: TObject); begin Table1.First; end;
Рис. 1.4. Программа со всеми четырьмя кнопками
procedure TForm1.LastClick(Sender: TObject); begin Table1.Last; end;
Нет ничего более простого чем эти навигационные функции. First перемещает Вас в начало таблицы, Last перемещает Вас в конец таблицы, а Next и Prior перемещают Вас на одну запись вперед или назад. TDataSet.BOF - read-only Boolean свойство, используется для проверки, находитесь ли Вы в начале таблицы. Свойства BOF возвращает true в трех случаях: 1. После того, как Вы открыли файл; 2. После того, как Вы вызывали TDataSet.First; 3. После того, как вызов TDataSet.Prior не выполняется. Первые два пункта - очевидны. Когда Вы открываете таблицу, Delphi помещает Вас на первую запись; когда Вы вызываете метод First, Delphi также перемещает Вас в начало таблицы. Третий пункт, однако, требует небольшого пояснения: после того, как Вы вызывали метод Prior много раз, Вы могли добраться до начала таблицы, и следующий вызов Prior будет неудачным - после этого BOF и будет возвращать True. Следующий код показывает самый общий пример использования Prior, когда Вы попадаете к началу файла:
while not Table.Bof do begin //Список операторов Table1.Prior; end;
В коде, показанном здесь, список операторов будет вызван сперва на текущей записи и затем на каждой следующей записи (от текущей и до начала таблицы). Цикл будет продолжаться до тех пор, пока вызов Table1.Prior не сможет больше переместить Вас на предыдущую запись в таблице. В этот момент BOF вернет True и программа выйдет из цикла. (Чтобы оптимизировать вышеприведенный код, установите DataSource1.Enabled в False перед началом цикла и верните его в True после окончания цикла.) Все сказанное относительно BOF также применимо и к EOF. Другими словами, код, приведенный ниже, показывает простой способ пробежать по всем записям в dataset:
Table1.First; while not Table.Eof do begin //Список операторов Table1.Next; end;
Классическая ошибка в случаях, подобных этому: Вы входите в цикл while или repeat, но забываете вызывать Table1.Next: Table1.First; repeat //Список операторов until Table1.EOF;
Если Вы случайно написали такой код, то ваша машина зависнет, и Вы сможете выйти из цикла, только нажав Ctrl-Alt-Del и прервав текущий процесс. Также, этот код мог бы вызвать проблемы, если Вы открыли пустую таблицу. Так как здесь используется цикл repeat, «Список операторов» был бы вызван один раз, даже если бы нечего было обрабатывать. Поэтому, лучше использовать цикл while вместо repeat в ситуациях подобных этой. EOF возвращает True в следующих трех случаях: 1. После того, как Вы открыли пустой файл; 2. После того, как Вы вызывали TDataSet.Last; 3. После того, как вызов TDataSet.Next не выполняется. Единственная навигационная процедура, которая еще не упоминалась - MoveBy, которая позволяет Вам переместиться на N записей вперед или назад в таблице. Если Вы хотите переместиться на две записи вперед, то напишите:
MoveBy(2);
И если Вы хотите переместиться на две записи назад, то:
MoveBy(-2);
При использовании этой функции Вы должны всегда помнить, что DataSet - это изменяющиеся объекты, и запись, которая была пятой по счету в предыдущий момент, теперь может быть четвертой или шестой или вообще может быть удалена. Prior и Next - это простые функции, которые вызывают MoveBy.
Дата добавления: 2015-03-29; Просмотров: 375; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |