Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа7.doc
Скачиваний:
5
Добавлен:
06.11.2018
Размер:
461.82 Кб
Скачать
    1. Команды навигации

Есть два способа доступа к данным для выполнения операций с ними:

  • навигационный – заключается в поочередной обработке отдельных записей таблицы. Запись обрабатываемая в данный момент называется текущей;

  • реляционный – обрабатывается сразу группа записей (количество записей в группе может быть от одной до всех записей таблицы) Этот способ основывается на SQL- запросах.

Для реализации первого способа лучше подходит компонент Table, второй реализуется лишь компонентом Query.

Для изменения текущей записи используются навигационные методы First, Last, Next и Prior, которые устанавливают текущую запись на первую, последнюю, следующую от текущей и предыдущую от текущей запись таблицы соответственно.

Для определения того, является ли текущая запись первой или последней записью таблицы используйте логические функции Bof и Eof соответственно.

Побочным эффектом выполнения ряда операций с набором данных является изменения указателя текущей записи. Как правило этот эффект нежелателен. Для восстановления прежнего положения текущего указателя можно использовать закладки – специальные пометки каких-либо записей. Для использования закладки ее сначала создают функцией GetBookmark, которая к тому же запоминает текущую запись, а затем, при необходимости, используют для перехода к помеченной ей записи – GotoBookmark. Если закладка больше не нужна – ее удаляют методом FreeBookmark.

Пример перебора всех записей таблицы:

procedure TForm1.Button1Click(Sender: TObject);

var bm : TBookmark;

begin

bm:= Table1.GetBookmark; {запоминаем текущую запись}

Table1.First;{переход к первой записи}

while not(Table1.Eof)do begin {цикл пока не достигнем конца таблицы}

... {работа с текущей записью}

Table1.Next;{переход к следующей записи}

end;

if Table1.BookmarkValid(bm)

then begin Table1.GotoBookmark(bm);

Table1.FreeBookmark(bm);

end;

{возвращаемся к запомненной записи и удаляем закладку}

end;

    1. Визуальные компоненты для работы с данными

Визуальные компоненты для работы с данными расположены на странице DataControls Палитры компонентов. Эти компоненты похожи на соответствующие компоненты страниц Standart и Additional и отличаются от них тем, что имеют дополнительные свойства, ориентированные на работу с БД: свойство DataSource – указывает на источник данных (компонент типа TDataSource) и свойство DataField, указывающее на поле данного источника.

У многих вызывает недоумение зачем нужно это промежуточное звено (DataSource) между набором данных(Table или Query) и визуальными компонентами (DBGrid, DBEdit,…).

Во-первых, оно нужно для быстрого отключения отображения полей набора данных в визуальных компонентах. Например, когда в вашей программе какая либо процедура обрабатывает данные набора перебором все эти действия отображаются на визуальных компонентах, что приводит к мельканию изображения и потере быстродействия. Чтобы этого не происходило, предварительно установите свойство DataSourse Enabled:=False, а в конце процедуры-обработчика обратно Enabled:=True.

Во-вторых, для разрешения/запрета редактирования данных посредством визуальных компонент – свойство AutoEdit.

Ну и для быстрой таблицы, с которыми работают визуальные компоненты – свойство DataSet.

Для всех визуальных компонентов для работы с БД при изменении пользователем их содержимого набор данных автоматически переводится в режим редактирования. Произведенные изменения автоматически сохраняются в связанных с ними полях (осуществляется переход в режим навигации) при наступлении определенных событий, таких, например, как потеря фокуса визуальным компонентом.

При программном изменении содержимого этих визуальных компонентов автоматического перехода в режим редактирования не происходит. Для этого нужно вызывать метод Edit набора, ну и соответственно затем Post для сохранения изменений.