Работа c базами данных в DELPHI: Методические указания к разработке проектов в DELPHI, страница 6

В сведениях о студентах имя и отчество необходимо записывать полностью, а при выводе результатов аттестации достаточно фамилии и инициалов (поскольку в группе могут быть однофамильцы). С этой целью в таблице предусмотрено поле ФИО, которое формируется программно и используется там, где вывод полного имени и отчества не требуется.

 


Рисунок 6.5 – Взаимосвязь компонентов формы 3 с базой данных

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

Двойной щелчок на кнопке “Сохранить” переместит нас в окно редактора кода, в котором необходимо набрать операторы:

with  DataModule2.Table1 do

 begin

 Edit;

 FieldByName('ФИО').AsString:=FieldByName('Фамилия').AsString+

 ' '+copy(FieldByName('Имя').AsString,1,1)+'.'+

 copy(FieldByName('От_во').AsString,1,1)+'.';

 Post;

 Append;

 DBEdit1.SetFocus;

 Label8.Caption:=IntToStr(RecordCount);

обеспечивающие необходимую функциональность обработчика события, связанного с нажатием кнопки “Сохранить”. Набирая эти операторы попытайтесь осмыслить, для чего они нужны.

Обработчик события, связанного с нажатием кнопки “Выход”, может быть следующим:

DataModule2.Table1.Delete;

RC:=DataModule2.Table1.RecordCount;

DataModule2.Table1.Active:=False;

with DataModule2.Table2 do

 begin

 Active:=True;

 for i:=1 to RC do

  begin

  Edit;

  Append;

  Post;

  end;

 Active:=False;

 end;

Close;

Между заголовком процедуры и операторной скобкой begin нужно поместить описание локальных переменных: var i,RC:integer;.

Щелчок на свободном месте формы и выбор события OnActivate для нее даст возможность создать обработчик события, связанного с активизацией формы. Он должен быть следующим:

if DataModule2.Table1.Active=False then

   DataModule2.Table1.Active:=True;

   DataModule2.Table1.Edit;

   DataModule2.Table1.Append;

Label8.Caption:=IntToStr(DataModule2.Table1.RecordCount);

   DBEdit1.SetFocus;.

Форма, которую мы сконструировали, должна появляться при выборе пункта меню “Ввод данных|Список” главной формы нашего приложения.

Для того чтобы это было так, перейдем к редактированию модуля Unit1. В окне редактора кода необходимо выбрать закладку Unit1 и нажать клавишу F12. Выбрав пункт File|UseUnit … в главном меню DELPHI, а в появившемся окне строку Unit3, добавляем ссылку на модуль Unit3. Переключимся в окно дизайнера форм и в меню формы выполним щелчок мышью на пункте “Ввод данных|Список”. Обработчик событий, ассоциированный с этим пунктом меню,  представляет собой одну строку:

Form3.Show;.

Проверьте работоспособность разработанной части приложения с привлечением программы DatabaseDesktop.

Для этого необходимо запустить приложение, активизировать в меню пункт “Ввод данных|Список”, ввести данные для нескольких условных студентов, выйти из программы, последовательно нажимая кнопку “Выход” и активизируя пункт “Выход” меню главного окна приложения. Просмотреть результаты этой работы можно с помощью программы Database Desktop. Если в таблице “список.DB” появились вводимые ранее данные – все функционирует нормально.

Конструируем новую форму. Надпись на форме – “Аттестация”. Поместим на форму два компонента DBGrid и одну кнопку. Свойство DataSourse компонента DBGrid1DataModule2.DataSourse3, а компонента DBGrid2DataModule2.DataSourse2. Установим размеры компонентов и другие свойства в соответствии с рисунком 6.6.

В главном меню выберем пункт File|Use Unit …, в появившемся окне имя Unit2, нажмем Ok. Этим самым мы подключили модуль Unit2 для его использования в качестве интерфейсного элемента. Структура взаимосвязи компонентов может быть представлена в соответствии с рисунком 6.7.

Рисунок 6.6 –  Вид четвертой формы

Обработчиков событий будет два: Один из них будет запускаться при активизации формы, а другой – при нажатии кнопки “Выход”. Первый из обработчиков имеет вид:

with DataModule2.Query1 do

 begin

 Close;

 SQL.Clear;

 SQL.Add('SELECT ФИО FROM список.DB');

 Open;

 end;

 if DataModule2.Table2.Active=False then

    DataModule2.Table2.Active:=True;

DataModule2.Table2.Edit;.

Второй обработчик :

DataModule2.Table2.Post;

DataModule2.Table2.Active:=False;

DataModule2.Query1.Close;

Close

 


Рисунок 6.7 – Взаимосвязь компонентов формы 4 с базой данных