Продолжаем закреплять полученные знания о компонентах ввода данных и дорабатываем проект “Библиотека” v.3.0
Требования заказчика
Доработать проект Библиотека v.3.0:
- в библиотеке хранить информацию как о бумажных книгах, так и о книгах в цифровом формате
- для электронных книг хранить их содержимое (файл)
- предусмотреть возможность хранения обложки книги
- хранить биографическую информацию об авторах
Проектирование
Очевидно, что для реализации требований заказчика требуется доработка структуру хранения данных. Поэтому мы повышаем номер версии проекта, и добавляем новые поля:
- book.digital – да/нет
- book.data – файл
- book.cover – изображение
- author.bio – текст
Число форм остаётся неизменным, но добавляются новые поля для ввода и отображения данных.
🔨 Внесите данную информацию в проектную документацию.
Новые поля
🔨 Добавьте необходимые поля в таблиц
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-23_180757346.png)
Новые поля будут необязательными к заполнению, кроме поля book.digital.
☝ Чтобы добавить обязательное поле в существующую базу, необходимо указать для него значение по умолчанию.
Для данного логического поля таким значением будет 0.
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-23_181044102.png)
Формы редактирования
Книга (efmBook)
На форме редактирования книги добавляем чекбокс (1), компонент для хранения файлов (2) и компонент для хранения изображений (3).
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-25_125419032.png)
Кроме того, предлагаю формы редактирования сделать в светлом стиле главной формы. Для этого необходимо изменить свойство Color у формы, а также свойство Style на bsCommandLink у кнопок (4).
Хранить изображения и сами файлы цифровых книг лучше не в базе, а в отдельных папках. Это позволит сохранить у самой базы данных небольшой размер (что положительно скажется на скорости работы приложения), а также сохранить возможность доступа к файлам книг средствами операционной системы, что сохранит наши книги даже в случае поломки базы или неработоспособности приложения. Для этого тип хранения (свойство Type) должен быть указан как LinkFile, а в свойстве CopyTo прописать пути к папкам, которые будут находиться рядом с проектом.
🔨 Настройте свойства компонентов для формы efmBook
Свойство | efmBook | btnSave | btnCancel | Чекбокс | Файл | Картинка |
---|---|---|---|---|---|---|
Name | chbDigital | dbfData | bdiCover | |||
Style | bsCommandLink | bsCommandLink | ||||
Font.Size | 11 | 11 | ||||
Left | 420 | 540 | 8 | 8 | 424 | |
Top | 297 | 297 | 232 | 256 | 16 | |
Width | 661 | 113 | 113 | 145 | 406 | 225 |
Height | 341 | 273 | ||||
BgColor | clWindow | |||||
Transparent | True | |||||
TableName | book | book | book | |||
TableField | digital | data | cover | |||
Type | LinkFile | LinkFile | ||||
CopyTo | \books | \covers |
Для кнопки “Сохранить” обновляем информацию о полях, которые нужно сохранять в базе:
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-25_131642759.png)
Автор (efmAuthor)
На форме редактирования автора добавляем компонент для ввода многострочного текста, меняем компоновку элементов и стиль кнопок:
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-25_131932551.png)
🔨 Настройте свойства компонентов для формы efmAuthor
Свойство | efmBook | btnSave | btnCancel | Многострочный текст |
---|---|---|---|---|
Name | memBio | |||
Style | bsCommandLink | bsCommandLink | ||
Font.Size | 11 | |||
Left | 178 | 297 | 8 | |
Top | 208 | 208 | 56 | |
Width | 417 | 113 | 113 | 401 |
Height | 255 | 145 | ||
BgColor | clWindow | |||
TableName | author | |||
TableField | bio | |||
ScrollBars | ssVertical |
Для кнопки “Сохранить” обновляем информацию о полях, которые нужно сохранять в базе:
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-25_132435661.png)
Подведение итогов
За несколько минут вы модифицировали проект, добавив несколько полей редактирования и настроив кнопки для их правильного функционирования.
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-25_132920256.png)
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-25_133020516.png)
![](https://k245.ru/wp-content/uploads/2023/09/izobrazhenie_2023-09-25_133340317.png)
Заказчику приложение понравилось, однако он захотел, чтобы биографическая информация об авторах содержала не только текст, но и фотографии, в частности – фото автора. Можно было бы добавить ещё одно поле в таблицу author, но мы поступим иначе: будем хранить текст и картинки вместе. Но перед там, как это устроить, необходимо познакомиться с расширенным текстовым редактором.
Замечательный цикл статей!!!
Вопрос по чекбоксу: а можно ли сделать так, чтоб при не выбранном чекбоксе, было неактивно поле с добавлением файлов?
Можно, но для этого понадобится писать скрипты, примерно такие:
procedure efmBook_chbDigital_OnClick (Sender: TObject);
begin
efmBook.dbfData.Enabled := efmBook.chbDigital.Checked;
end;
procedure efmBook_OnShow (Sender: TObject; Action: string);
begin
efmBook.dbfData.Enabled := efmBook.chbDigital.Checked;
end;
Компоненты для ввода и отображения рассчитаны только для ввода и отображения. А все остальное (изменение логики работы или внешнего вида формы) реализуется через обработчики событий.
Таких моментов очень много возникает в ходе работы над реальным проектом, поэтому автор My Visual Database предусмотрел расширение логики и создание low-code приложений. Наброски для второй части книги (low-code) у меня есть, в частности про SQL для SQLite – полезная штука для создания вычисляемых полей и кнопок, использующих SQL-запросы. А вот создать полноценный учебник по использованию FastScript (pascal) в MVDB – задача сложная. Во первых из-за большего объёма, во-вторых из-за не совсем логичной реализации поддержки отдельных объектов (классов), а именно – поддержка свойств и событий выборочная, и если раньше при возникновении необходимости можно было обратиться к автору проекта, и он добавлял требуемые свойства в скрипты, то сейчас этот стало невозможным.