Продолжаем закреплять полученные знания о компонентах ввода данных и дорабатываем проект “Библиотека” v.3.0

Требования заказчика

Доработать проект Библиотека v.3.0:

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

Проектирование

Очевидно, что для реализации требований заказчика требуется доработка структуру хранения данных. Поэтому мы повышаем номер версии проекта, и добавляем новые поля:

  • book.digital – да/нет
  • book.data – файл
  • book.cover – изображение
  • author.bio – текст

Число форм остаётся неизменным, но добавляются новые поля для ввода и отображения данных.

🔨 Внесите данную информацию в проектную документацию.

Новые поля

🔨 Добавьте необходимые поля в таблиц

Новые поля будут необязательными к заполнению, кроме поля book.digital.

☝ Чтобы добавить обязательное поле в существующую базу, необходимо указать для него значение по умолчанию.

Для данного логического поля таким значением будет 0.

Формы редактирования

Книга (efmBook)

На форме редактирования книги добавляем чекбокс (1), компонент для хранения файлов (2) и компонент для хранения изображений (3).

Кроме того, предлагаю формы редактирования сделать в светлом стиле главной формы. Для этого необходимо изменить свойство Color у формы, а также свойство Style на bsCommandLink у кнопок (4).

Хранить изображения и сами файлы цифровых книг лучше не в базе, а в отдельных папках. Это позволит сохранить у самой базы данных небольшой размер (что положительно скажется на скорости работы приложения), а также сохранить возможность доступа к файлам книг средствами операционной системы, что сохранит наши книги даже в случае поломки базы или неработоспособности приложения. Для этого тип хранения (свойство Type) должен быть указан как LinkFile, а в свойстве CopyTo прописать пути к папкам, которые будут находиться рядом с проектом.

🔨 Настройте свойства компонентов для формы efmBook

СвойствоefmBookbtnSavebtnCancelЧекбоксФайлКартинка
NamechbDigitaldbfDatabdiCover
StylebsCommandLinkbsCommandLink
Font.Size1111
Left42054088424
Top29729723225616
Width661113113145406225
Height341273
BgColorclWindow
TransparentTrue
TableNamebookbookbook
TableFielddigitaldatacover
TypeLinkFileLinkFile
CopyTo\books\covers

Для кнопки “Сохранить” обновляем информацию о полях, которые нужно сохранять в базе:

Автор (efmAuthor)

На форме редактирования автора добавляем компонент для ввода многострочного текста, меняем компоновку элементов и стиль кнопок:

🔨 Настройте свойства компонентов для формы efmAuthor

СвойствоefmBookbtnSavebtnCancelМногострочный текст
NamememBio
StylebsCommandLinkbsCommandLink
Font.Size11
Left1782978
Top20820856
Width417113113401
Height255145
BgColorclWindow
TableNameauthor
TableFieldbio
ScrollBarsssVertical

Для кнопки “Сохранить” обновляем информацию о полях, которые нужно сохранять в базе:

Подведение итогов

За несколько минут вы модифицировали проект, добавив несколько полей редактирования и настроив кнопки для их правильного функционирования.

Заказчику приложение понравилось, однако он захотел, чтобы биографическая информация об авторах содержала не только текст, но и фотографии, в частности – фото автора. Можно было бы добавить ещё одно поле в таблицу author, но мы поступим иначе: будем хранить текст и картинки вместе. Но перед там, как это устроить, необходимо познакомиться с расширенным текстовым редактором.

3 комментария к «Проект “Библиотека” v.4.0»
  1. Замечательный цикл статей!!!
    Вопрос по чекбоксу: а можно ли сделать так, чтоб при не выбранном чекбоксе, было неактивно поле с добавлением файлов?

    1. Можно, но для этого понадобится писать скрипты, примерно такие:

      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;

      Компоненты для ввода и отображения рассчитаны только для ввода и отображения. А все остальное (изменение логики работы или внешнего вида формы) реализуется через обработчики событий.

    2. Таких моментов очень много возникает в ходе работы над реальным проектом, поэтому автор My Visual Database предусмотрел расширение логики и создание low-code приложений. Наброски для второй части книги (low-code) у меня есть, в частности про SQL для SQLite – полезная штука для создания вычисляемых полей и кнопок, использующих SQL-запросы. А вот создать полноценный учебник по использованию FastScript (pascal) в MVDB – задача сложная. Во первых из-за большего объёма, во-вторых из-за не совсем логичной реализации поддержки отдельных объектов (классов), а именно – поддержка свойств и событий выборочная, и если раньше при возникновении необходимости можно было обратиться к автору проекта, и он добавлял требуемые свойства в скрипты, то сейчас этот стало невозможным.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *