Теперь нужно в самой первой форме, которая была создана в примере к лабораторной работе №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” и создадим для нее следующий обработчик:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.