Шаг 5. Разработка интерфейса пользователя

Хорошее приложение должно иметь удобный интерфейс пользователя.

Давайте рассмотрим один несложный пример организации работы пользователя с нашей базой данных.

Чтобы не загромождать приложение удалите с главной формы компонент DBGrid2, а с формы Модуля данных компоненты QueryOtbor и DataSource3.

В Модуль Данных добавьте ADOTable1, переименуйте в TableLang и соедините с ADOConnection1; добавьте также и DataSource3 и соедините с TableLang.

У компонента DBGrid1 через инспектор объектов в множественном свойстве Options свойство dgEditing переведите в False, для того чтобы пользователь не мог непосредственно редактировать содержимое таблицы. Мы сделаем доступ к ячейкам таблицы через специальную форму.

Создайте новую форму, дайте ей имя FormRedactor и сохраните модуль под именем Redactor.pas. Подключите к новой форме Модуль Данных UnitDM. Разместите на форме пять меток Label, четыре компонента DBEdit и один DBLookup- ComboBox1 с вкладки Data Controls, две кнопки («сохранить», «не сохранять»).

Подключим компоненты к базе данных. Для всех DBEdit в качестве компонента посредника укажите DM.DataSource1, а в свойстве DataField в ниспадающем списке укажите соответствующее поле для отображения. Несколько сложнее настроить компонент DBLookupComboBox1 – ведь он должен одновременно обращаться к двум таблицам: из таблицы магазин компонент будет выбирать номер языка программирования, а из таблицы языки его название. Для начала в свойстве DataSource укажите компонент посредник DM.DataSource1, связанный с основной таблицей магазин, которую и будем редактировать с помощью разрабатываемой формы. А в свойстве DataField укажите поле для редактирования – язык программирования. Далее надо сделать так, чтобы в ниспадающем списке компонента DBLookupComboBox1 отображались не номера языков программирования, а их названия. В свойстве ListSource укажите DM.DataSource3 – там будут выбираться названия языков, а в свойстве ListField укажите поле этой таблицы, из которого будут выбираться названия языков – язык. Но в основной таблице магазин следует сохранять не название, а номер языка программирования, поэтому в свойстве KeyField укажите id_lang. После настройки форма редактора записи базы данных будет иметь такой вид:

Давайте теперь подключим форму редактора к главной форме: переключитесь на главную форму, в меню Файл / Использовать модуль укажите Redactor. На главной форме разместите три кнопки: «Добавить новую запись», «Удалить текущую запись», «Редактировать текущую запись».

Начнем с кнопки «Редактировать текущую запись». В обработчик события OnClick этой кнопки добавьте одну строку кода – FormRedactor.ShowModal. Этим вы обеспечиваете запуск в модальном режиме формы редактора, которая будет отображать поля текущей выделенной записи и у пользователя не будет возможности перейти к другой записи базы данных пока он не закроет форму редактора. Апробируйте приложение – устанавливайте курсор на разные позиции в основной таблице и вызывайте редактор. Он должен отображать текущую запись в удобной для пользователя форме. Однако кнопки «сохранить» и «не сохранять» пока не действуют. Устраним эту недоработку.

Для кнопки сохранить можно использовать такой подход – если содержимое полей таблицы менялось, то сохрани их методом Post, после чего закрой форму редактора:

procedure TFormRedactor.Button1Click(Sender: TObject);

begin

if DM.TableMagazin.Modified then DM.TableMagazin.Post;

Close;

end;

Если пользователь выбрал кнопку «не сохранять», то можно использовать специальный метод выхода без сохранения – Cancel:

procedure TFormRedactor.Button2Click(Sender: TObject);

begin

DM.TableMagazin.Cancel;

Close;

end;

Апробируйте работу кнопок, внеся изменения в базу данных.

Осталось подключить кнопки добавления и удаления записи.

Что нужно для реализации действия добавления записи. В нашем случае две операции: вставить в таблицу пустую запись и открыть на ней форму редактора:

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

DM.TableMagazin.Insert;

FormRedactor.ShowModal;

end;

Для удаления текущей записи из таблицы достаточно использовать специальный метод Delete, но для безопасности лучше предварить его вопросом к пользователю о подтверждении операции удаления. И было бы неплохо, чтобы программа показывала, что именно предстоит удалить, а не просто спрашивала о подтверждении операции удаления.

Это можно сделать с помощью одного из видов модальных диалогов, например, MessageBox.

Перенести информацию о текущей записи из главной формы можно с помощью обращения к модулю данных. В модуле данных дважды кликните по компоненту TableMagazin и в открывшемся окне настройки полей таблицы выделите поле название. В инспекторе объектов вы увидите имя, данное этому компоненту – TableMagazinDSDesigner. К нему как к строке мы и будем обращаться:

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

if MessageBox(0, PChar('Удалить запись '+DM.TableMagazinDSDesigner.AsString

+'?'), 'Подумайте', MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2)=id_yes

then DM.TableMagazin.Delete;

end;

Примерно такой результат можно получить используя модальный диалог:

=============================================================

На этом завершаем поверхностное знакомство с инструментами Delphi для работы с базами данных. Напомню, что мы рассмотрели только методику разработки СУБД с использованием компонентов ADO (базы данных Access и MS SQL Server). Кроме этого Delphi позволяет использовать иные технологии: BDE – для доступа к базам данных Paradox и dBase, DBExpress – для доступа к базам данных Oracle, DB2, MySQL). За рамками рассмотрения остались вопросы оформления отчетной документации по базам данных. Печать и сохранение данных можно оформить через компоненты QuickReports или Rave Reports, через вывод данных в Excel или Word. Хочу также обратить ваше внимание, что написать серьезную СУБД без понимания языка SQL вряд ли получится. Среда визуального проектирования и событийного программирования Delphi предоставляет широкие возможности для разработки приложений по управлению базами данных, но разработка СУБД требует познаний о разнообразных информационных технологиях и успеха можно достичь только самостоятельным анализом и освоением разрозненного материала.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: