Связь между таблицами в нашей базе данных происходит по полю “Ключ”. На форме это поле отсутствует – его значение генерируется автоматически. После того, как мы внесли записи на первой панели GroupBox, их необходимо сохранить – для того, чтобы другие таблицы смогли связаться с внесенными записями.
Для сохранения изменений в таблице мы пропишем метод Post, который будет выполняться при выходе из панели GroupBox.
Выделите первый GroupBox, и дважды щелкните по событию onExit на вкладке Events инспектора объектов. Это событие происходит всякий раз, когда пользователь перейдет к другой панели GroupBox, либо к кнопкам, расположенным в нижней части окна. В сгенерированной процедуре впишите код:
{Вышли из редактирования LichData}
procedure TfEditor.GroupBox1Exit(Sender: TObject);
begin
if fDM.TLichData.Modified then
fDM.TLichData.Post;
end;
Введенный код означает, что если запись была изменена, то следует ее сохранить. Сгенерируйте событие onExit для оставшихся панелей GroupBox и таким же образом сохраните изменения записей в соответствующих таблицах.
Далее двойным щелчком сгенерируйте событие нажатия на кнопку “Добавить” в GroupBox с телефонными данными. Этой кнопкой мы будем добавлять новые записи в таблицу, ведь один сотрудник может иметь более одного телефона. Код в процедуре будет такой:
if fDM.TTelephones.Modified then
fDM.TTelephones.Post;
fDM.TTelephones.Append;
DBEdit14.SetFocus;
Вначале мы сохраняем измененные значения, если они были. Затем методом Append мы добавляем в таблицу новую запись. Далее мы переводит фокус ввода на DBEdit с телефонными номерами, чтобы пользователю не пришлось делать это самому.
В процедуре нажатия на кнопку “Сохранить и выйти” код простой:
if fDM.TLichData.Modified then
fDM.TLichData.Post;
if fDM.TDoljnost.Modified then
fDM.TDoljnost.Post;
if fDM.TAdres.Modified then
fDM.TAdres.Post;
if fDM.TTelephones.Modified then
fDM.TTelephones.Post;
Close;
Для кнопки “Добавить сотрудника” пропишите:
fDM.TLichData.Append;
fDM.TDoljnost.Append;
fDM.TAdres.Append;
fDM.TTelephones.Append;
DBEdit1.SetFocus;
Здесь мы добавляем новую запись в каждую таблицу и переводим курсор в первый DBEdit, в котором редактируется фамилия.
Переходим к главной форме. Начнем с кнопки “Новый сотрудник”. Нам необходимо добавить новую запись в каждую таблицу, после чего открыть окно редактора:
fDM.TLichData.Append;
fDM.TDoljnost.Append;
fDM.TAdres.Append;
fDM.TTelephones.Append;
fEditor.ShowModal;
Сгенерируйте процедуру onClick для кнопки “Редактировать”. Тут будет лишь одна строчка кода: fEditor.ShowModal;
В результате откроется окно редактора, и компоненты будут отображать данные текущей записи. Предположим, пользователю будет удобней дважды щелкнуть по записи в верхней сетке DBGrid, чем нажимать кнопку. Поэтому выделите сетку с главной таблицей и сгенерируйте для нее событие onDBLClick. Там введите такую же строчку кода.
Перейдем к программированию радиокнопок. По нашему замыслу, при открытии программы в верхней сетке DBGrid будут отображаться данные из главной таблицы, а в нижней – из таблицы Adres. Также будет выделена радиокнопка с надписью “Адрес”. Если пользователю захочется посмотреть должность или телефоны текущего сотрудника, он будет щелкать соответствующую радиокнопку, и эти данные должны быть отображены в нижней DBGrid. Выделите первую радиокнопку с надписью “Адрес” и сгенерируйте для нее событие onClick, которое будет возникать, когда пользователь щелкнет по ней. В процедуре этого события впишите следующий код:
if RadioButton1.Checked then
DBGrid2.DataSource:= fDM.DSAdres;
Здесь мы проверили, включена ли данная радиокнопка. Если да, то мы меняем связь нижней сетки DBGrid и подключаем ее к таблице Adres. Ведь связь сетки с таблицей осуществляется через соответствующий компонент DataSource, а у нас их четыре. Подключаясь то к одному, то к другому DataSource, мы можем программно менять отображенную в сетке таблицу.
Для события onClick радиокнопки с надписью “Телефоны” код будет таким:
if RadioButton2.Checked then
DBGrid2.DataSource:= fDM.DSTelephones;
А для события onClick радиокнопки с надписью “Должность”, соответственно, код будет следующим:
if RadioButton3.Checked then
DBGrid2.DataSource:= fDM.DSDoljnost;
Таким образом, в нижней сетке мы отображаем то одну, то другую подчиненную таблицу, и всякий раз в этих таблицах будут показаны данные текущего сотрудника.
Сохраните проект и скомпилируйте его (по умолчанию компиляция происходит каждый раз при запуске проекта на выполнение).