- •Базы данных.
- •Проектирование базы данных
- •Шаги проектирования базы данных
- •Создание таблиц базы данных
- •Компоненты для работы с бд
- •Создание простейшего приложения
- •Режимы наборов данных
- •Команды навигации
- •Визуальные компоненты для работы с данными
- •Обзор компонент
- •Работа с полями таблицы
- •Создание статических полей
- •Задание ограничений на вводимые значения
- •Компонент 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:
- •Создание простого отчета
- •Включение выражений в отчет
- •Отображение системной информации
- •Группировка данных в отчете
- •Построение отчета для связанных наборов данных
- •Комбинированный отчет
- •Упражнения:
-
Обзор компонент
В скобках указаны соответствующие компоненты страниц Standart и Additional.
DBNavigator – компонент имеющий ряд кнопок нажатие на которые вызывают соответственно методы First, Prior, Next, Last, Insert, Delete, Edit, Post, Cancel и Refresh.
DBText (Label) – отображает значение поля простого типа (ftString, ftSmallint, ftInteger, ftBoolean, ftFloat, ftCurrency, ftDate, ftTime, ftDateTime) текущей записи.
DBEdit (Edit) – отображает и позволяет редактировать значение поля простого типа.
DBMemo (Memo) – отображает и позволяет редактировать значение поля типа ftMemo.
DBImage (Image) – отображает значение поля типа ftGraphic. Для изменения значения поля можно воспользоваться стандартными процедурами объекта TPicture, например:
DBImage.Picture.LoadFromFile(OpenPictureDialog.FileName)
DBRadioGroup (RadioGroup),
DBListBox (ListBox),
DBComboBox (Combobox) – позволяют выбрать значение поля простого типа из списка заданного в свойстве Items.
DBCheckBox (CheckBox) – отображает и позволяет редактировать значение поля типа ftBoolean.
DBLookupListBox (ListBox),
DBLookupComboBox (ComboBox) – позволяют работать с Lookup-связанными полями без их статического создания (см. урок 4, Поле выбора).
DBRichEdit (RichEdit) – отображает и позволяет редактировать значение поля типа ftFmtMemo
DBCtrlGrid – при размещении на этом компоненте других визуальных компонент для работы с БД, он позволяет увидеть значения их полей для всех записей набора, а не только для текущей.
DBChart (Chart) – позволяет построить диаграмму, используя значения числового поля набора данных. В отличие от Chart, при выборе типа данных DataSource у какой-либо Series можно указать – Dataset или Single Record и затем выбрать набор данных и его поля, по которым необходимо построить диаграмму.
DBGrid (StringGrid) – таблица позволяющая просмотреть и редактировать значение полей с простыми типами данных. По умолчанию каждому полю набора данных, связанного с DBGrid, соответствует столбец сетки, который создается динамически. Для создания статических столбцов можно воспользоваться Редактором столбцов. Работа с Редактором столбцов аналогична работе с Редактором полей для набора данных. Достоинство статических столбцов в том, что для них можно установить значения свойств отличные от свойств соответствующего поля.
-
Работа с полями таблицы
Каждое поле набора данных представляет собой отдельный столбец соответствующей таблицы. Для работы с ними используется свойство Fields, содержащий список объектов типа TField. На количество столбцов набора указывает свойство FieldCount. Это количество может не совпадать с числом полей таблицы, т.к. состав полей может формироваться с помощью Редактора полей набора данных, а для компонента Query зависит от SQL-запроса.
Для примера рассмотрим копирование значений полей текущей записи в список ListBox1:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
ListBox1.Items.Clear;
for i:=0 to Table1.FieldCount-1 do
ListBox1.Items.Add(Table1.Fields[i].AsString);
end;
Поскольку номер поля в наборе не является фиксированным числом и зависит от текущего состава полей и их порядка, для доступа к полям чаще используют методы FindField и FieldByName, которые отличаются лишь тем, что FieldByName генерирует исключительную ситуацию (сообщение об ошибке) если заданное поле не найдено. Рассмотрим пример изменения последней записи таблицы:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
with Table1 do begin
Last;{переход к последней записи}
Edit;{переход в режим редактирования}
try
FieldByName('Name').AsString:=Edit1.Text;{Значение из Edit1}
FieldByName('Count').AsInteger:=StrToInt(Edit2.Text); {Значение из Edit2}
FieldByName('Time').AsDateTime:=Now;{Текущее время}
Post; {выход из режима редактирования с сохранением изменений}
except
Cancel; {аварийный выход из режима редактирования без сохранения изменений}
ShowMessage('Ошибка изменения данных');
end;
end;
end;
Обратите внимание на конструкцию try … except … end, которая обеспечивает выход из режима редактирования (метод Cancel) при возникновении исключительной ситуации (например, если в Edit2 содержится не число).