Разработка и эксплуатация АИС: Методическое пособие для выполнения лабораторных работ № 9-15, страница 8

Теперь нужно в самой первой форме, которая была создана в примере к лабораторной работе №9, нужно обеспечить возможность открытия формы редактирования информации о постояльце с передачей ей идентификатора нужной записи. Для этого можно воспользоваться списком закладок компонента TDBGrid (свойство SelectedRows), в котором содержатся указатели на выделенные в нем ячейки. Для того, чтобы это свойство стало доступно, нужно установить в TRUE свойства RowSelect и MultiSelect множества свойств Options компонента TDBGrid. Т.к. мы выставили возможность выбора нескольких ячеек в сетке TDBGrid, а в форму редактирования информации о постояльце нужно передать единственный идентификатор, то привяжем создание этой формы к событию двойного щелчка мыши по сетке, при котором множественное выделение сбрасывается:

procedure TForm1.DBGrid1DblClick(Sender: TObject);

var

frmEditInfo: TfrmClientEdit;

begin

if DBGrid1.SelectedRows.Count>0 then begin

DBGrid1.DataSource.DataSet.GotoBookmark(

pointer(DBGrid1.SelectedRows.Items[0]));

unit3.clientID :=

DBGrid1.DataSource.DataSet.FieldByName('id').AsInteger;

frmEditInfo:=TfrmClientEdit.Create(Self);

frmEditInfo.ShowModal;

frmEditInfo.Free;

if frmEditInfo.ShowModal = mrOK then begin

table1.Close;

table1.Open;

end;

frmEditInfo.Free;

end;

end;

Так же нужно удалить форму frmClientEdit из списка автосоздаваемых (меню “Project”->”Options”, вкладка “Forms”) и добавить модуль “Unit3” в список uses модуля “Unit1”.

Теперь обеспечим возможность редактировать информацию о постояльцах и сохранять в БД внесенные изменения. Для этого определим обработчик щелчка мышью по кнопке “Сохранить” формы редактирования информации о постояльцах:

procedure TfrmClientEdit.btnSaveClick(Sender: TObject);

begin

if (edFIO.Text<>'') and (edDoc.Text<>'') then begin

query1.SQL.Text:='UPDATE clients

SET fio = "'+edFIO.Text+'",

doc = "'+edDoc.Text+'"

WHERE id = '+IntToStr(clientID)+';';

query1.ExecSQL;

query1.Close;

end else

Application.MessageBox('Вставка пустых записей не допускается',

'Error', MB_OK+MB_ICONERROR);

end;

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

procedure TfrmClientEdit.btnSaveClick(Sender: TObject);

var

maxID: Integer;

begin

if (edFIO.Text<>'') and (edDoc.Text<>'') then begin

if clientID > 0 thenbegin

{операторы обновления записи (см. выше)}

end else begin

query1.SQL.Text:=’SELECT MAX(id) FROM clients’;

query1.Open;

maxID:=query1. Fields[0].AsInteger + 1;

query1.Close;

query1.SQL.Text:='INSERT INTO clients(id, fio, doc)

VALUES(' + maxID + ', "' + edFIO.Text + '",

"'+ edDoc.Text + '");';

query1.ExecSQL;

query1.Close;

end;

endelse

{сообщение об ошибке (см. выше)}

end;

procedure TfrmClientEdit.FormCreate(Sender: TObject);

begin

if clientID > 0 then begin

frmClientEdit.Caption:='Изменение информации о постояльце';

lbCaption.Caption:='Изменить информацию о постояльце:';

{операторы извлечения данных из БД (см. выше)}

end else begin

frmClientEdit.Caption:='Добавление нового постояльца';

lbCaption.Caption:='Добавить нового постояльца:';

end;

Осталось только добавить в вызывающую форму (Form1) кнопку для добавления нового постояльца, назовем ее “btnNewClient”:

procedure TForm1.btnNewClientClick(Sender: TObject);

var

frmEditInfo: TfrmClientEdit;

begin

unit3.clientID:=0;

frmEditInfo:=TfrmClientEdit.Create(Self);

if frmEditInfo.ShowModal = mrOK then begin

table1.Close;

table1.Open;

end;

frmEditInfo.Free;

end;

И, наконец, для полной реализации возможности манипулирования данными осталось только ввести возможность удаления строк из таблицы БД. Для этого на форму Form1 добавим кнопку “btnDelClients” и создадим для нее следующий обработчик: