Delphi. DataControls (практика)

В этом посте я попрактикуюсь с некоторыми элементами DataControls в Delphi XE7. За основу программы возьму программу, написанную в посте про основные операции с БД. Также воспользуюсь теоретическими постами

Delphi. Data Controls — компоненты доступа к БД (теория1)

Delphi. Data Controls — компоненты доступа к БД (теория2)

Delphi. Data Controls — компоненты доступа к БД (теория3)

Итак, для начала вспомним как подключиться к БД по технологии DBExpress?

1

 

Синим отмечено какие поля и свойства нужно заполнять, чтобы установить подключение

Какие DataControls существуют (на примере Delphi XE7)?

1

 

Практически всегда для отображения таблиц используется DBGrid, остальные компоненты как правило в меньшей степени. В предыдущих постах мы также использовали DBGrid и DBNavigator. В данном посте посмотрим как можно пользоваться другими компонентами.

2

 

DBEdit, DBText, DBMemo, DBRichEdit

Когда использовать компоненты DBEdit, DBText, DBMemo, DBRichEdit?

DBEdit – просмотр / редактирование сравнительно небольших полей;

-DBText – только просмотр текстовых полей, если текст не помещается, можно использовать свойство WordWrap, поставив его в True;

-DBMemo – для просмотра / редактирования больших текстовых полей;

-DBRichEdit – аналогично DBMemo, но если нужен формат RTF;

3_1

 

Как подключить? Ниже я привожу код из FormCreate

Как сохранить в физической БД?

Как сделать синхронное обновление в DBGrid, вместе с вводом данных, например в DBEdit?
Нужно обработать событие OnChange

Но так лучше не делать – можно “посадить” сетку. Лучше всё-таки все “пишущие” операции оборачивать в транзакции и делать относительно “разовые” обновления и синхронизации с физической БД.

Дополнительные возможности компонентов DBEdit, DBText, DBMemo, DBRichEdit можно посмотреть в теоретической статье.


DBIMAGE

Перед тем как говорить о DBIMAGE, давайте разберемся как загрузить картинку в БД?

Как загрузить картинку в БД ?

4

 

Я использовал такой код

Естественно это черновой вариант (без обработки ошибок);

Как отобразить картинку в DBImage?

Для этого, я в FormCreate прописал следующий код…

Это для Bmp,png но не для jpg (для последнего нужно код поправить, но это не тема данного поста);

ТРАБЛ

В процессе создания примера столкнулся с ограничением максимально возможного размера BLOB поля. Это и хорошо – узнал ценную информацию. Первоначально картинки по 1,5 мб. не грузились, сервер падал. Пару часов погуглил и выяснил, что это из-за максимального размера BLOB поля, которое может быть различным.

5

 

 

Первоначально, я установил при создании таблицы тип поля BLOB, но грузил картинки по 1,5 мб. Естественно, это вызывало ошибку, которую я читал через обрабатываемое событие ReconcileError, например, у SimpleDataSet. В событии писал showmessage(e.message);

Когда разобрался в вопросе – всё встало на места – выставил тип поля MEDIUMBLOB;


DBListBox

6

 

По началу этот компонент мне показался странным, потому что не отображал данные из таблицы. Но чуть позже, я разобрался в чем дело. Этот компонент нужен для того, чтобы “вбивать” в БД значения из заранее заготовленного списка. У меня в примере выше настроено таким образом – жмем на DBListBox – на любое значение. При этом курсор переходит в режим редактирования. Далее жмем “Сохранить в физическую БД”, при этом выполняются команды simpledataset1.applyupdates(-1); simpledataset1.refresh;

Но этот список нужно заготовить, для этого, я в FormCreate заполнил его в ручную…

Аналогичная ситуация будет и с DBCombobox

7

 

Код для предварительной подготовки списка в DBCombobox


DBRadioGroup

Этот компонент работает аналогично компонентам DBListBox и DBCombobox

8

 

Выбираем одно из значений в блоке DBRadioGroup и оно тут же пишется в базу. Сохранить в физическую БД, можно стандартными инструкциями Post; ApplyUpdates;

Код для создания строк в радио группе следующий


DBCheckBox

Одним из главных свойств компонента DBCheckBox будут свойства ValueChecked, ValueUnChecked… Если в  присоединенном поле из БД будет хотя бы одно из значений, которое мы перечислили, то компонент соответственно будет отмечен галочкой или нет.

9

 

10

 

Отмечу, что по факту, у флажка 3 значения… Если в поле ничего не подходит, тогда флажок cbGrayed

typeCheckBoxState = (cbUnchecked,cbChecked, cbGrayed)

На этом данный пост завершу, остается ещё компонент DBCtrlGrid, но это отдельный, относительно сложный компонент – разберу его в отдельном посте.

С уважением, Станислав.

by Stanislav_Panteleev

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