- •Базы данных.
- •Проектирование базы данных
- •Шаги проектирования базы данных
- •Создание таблиц базы данных
- •Компоненты для работы с бд
- •Создание простейшего приложения
- •Режимы наборов данных
- •Команды навигации
- •Визуальные компоненты для работы с данными
- •Обзор компонент
- •Работа с полями таблицы
- •Создание статических полей
- •Задание ограничений на вводимые значения
- •Компонент Table
- •Сортировка и фильтрация
- •Поиск записей
- •If Table1.Locate ('Number',123,[]) {опции поиска отключены}
- •If not Table1.FindKey([EditGroup.Text,EditName.Text]){ищем соответствующие значения}
- •Связывание таблиц
- •Компонент Query
- •Чтение данных из таблиц (select)
- •Модификация записей (update, insert, delete)
- •Insert into Tovar.Db (Name, Price, Count) values (’Яблоки’, 20, 10)
- •Некоторые функции языка sql
- •Компоненты для построения отчетов
- •Основные свойства компоненты QuickRep
- •Методы компоненты QuickRep:
- •Свойства компоненты qrBand:
- •Создание простого отчета
- •Включение выражений в отчет
- •Отображение системной информации
- •Группировка данных в отчете
- •Построение отчета для связанных наборов данных
- •Комбинированный отчет
- •Упражнения:
-
Команды навигации
Есть два способа доступа к данным для выполнения операций с ними:
-
навигационный – заключается в поочередной обработке отдельных записей таблицы. Запись обрабатываемая в данный момент называется текущей;
-
реляционный – обрабатывается сразу группа записей (количество записей в группе может быть от одной до всех записей таблицы) Этот способ основывается на 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;
-
Визуальные компоненты для работы с данными
Визуальные компоненты для работы с данными расположены на странице DataControls Палитры компонентов. Эти компоненты похожи на соответствующие компоненты страниц Standart и Additional и отличаются от них тем, что имеют дополнительные свойства, ориентированные на работу с БД: свойство DataSource – указывает на источник данных (компонент типа TDataSource) и свойство DataField, указывающее на поле данного источника.
У многих вызывает недоумение зачем нужно это промежуточное звено (DataSource) между набором данных(Table или Query) и визуальными компонентами (DBGrid, DBEdit,…).
Во-первых, оно нужно для быстрого отключения отображения полей набора данных в визуальных компонентах. Например, когда в вашей программе какая либо процедура обрабатывает данные набора перебором все эти действия отображаются на визуальных компонентах, что приводит к мельканию изображения и потере быстродействия. Чтобы этого не происходило, предварительно установите свойство DataSourse Enabled:=False, а в конце процедуры-обработчика обратно Enabled:=True.
Во-вторых, для разрешения/запрета редактирования данных посредством визуальных компонент – свойство AutoEdit.
Ну и для быстрой таблицы, с которыми работают визуальные компоненты – свойство DataSet.
Для всех визуальных компонентов для работы с БД при изменении пользователем их содержимого набор данных автоматически переводится в режим редактирования. Произведенные изменения автоматически сохраняются в связанных с ними полях (осуществляется переход в режим навигации) при наступлении определенных событий, таких, например, как потеря фокуса визуальным компонентом.
При программном изменении содержимого этих визуальных компонентов автоматического перехода в режим редактирования не происходит. Для этого нужно вызывать метод Edit набора, ну и соответственно затем Post для сохранения изменений.