Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi базы.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.2 Mб
Скачать

6.2. Добавление записей

Добавлять записи можно только к модифицируемому НД.

Для добавления записи нужно выполнить следующие действия:

  • перевести НД в режим вставки;

  • задать значения полей текущей записи;

  • подтвердить сделанные изменения или отказаться от них, после чего НД снова переходит в режим просмотра.

Метод Insert переводит НД в режим вставки и добавляет к нему новую пустую запись. Новая запись вставляется перед текущей записью. При необходимости перед вызовом метода Insert необходимо выполнить перемещение текущего указателя на ту запись НД, перед которой вставляется новая запись.

Метод Append вставляет новую запись в конец НД.

Для компонента DBGrid новая запись добавляется к НД при нажатии клавиши [Insert] или при переходе на последнюю запись. Если на форме находится компонент DBNavigator , то новая запись добавляется при нажатии кнопки Insert Record (Вставить запись).

6.3. Удаление записей

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

При удалении записи генерируются события BeforeDelete и AfterDelete.

Если при удалении записи требуется подтверждение удаления, то можно написать следующий обработчик события OnClick для кнопки Button «Удалить запись»:

procedure TForm1.Button1Click(Sender: TObject);

begin

if MessageDlg ('Удалить запись?',

mtConfirmation, [mbYes, mbNo], 0) = mrYes then

Table1.Delete;

end;

Удаление нескольких последовательно расположенных записей имеет особенность, связанную с тем, что при вызове метода Delete в цикле по перебору удаляемых записей не нужно вызывать методы, перемещающие указатель текущей записи. после удаления текущей записи указатель автоматически перемещается на соседнюю (обычно следующую) запись. Так можно удалить все записи НД:

procedure TForm1.Button1Click(Sender: TObject);

var n:longint;

begin

Table1.Last;

For n:= Table1.RecordCount downto 1 do Table1.Delete;

end;

В примере перебор записей выполняется с конца НД. После удаления текущей записи указатель снова оказывается на последней записи.

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

6.4. Практическая работа

Создадим приложение для добавления, вставки, удаления записей таблицы Chitateli.db. В программе предусмотреть блокировку изменения записей.

Расположите на форме компоненты в соответствии с рисунком:

Для блокировки редактирования НД используется компонент CheckBox1 «Редактирование НД запрещено». Если флажок компонента установлен, то в НД невозможно внести какие-либо изменения. Для компонента CheckBox1 напишите следующий обработчик события OnClick:

procedure Tform1.CheckBox1Click(Sender: TObject);

begin

if CheckBox1.Checked then

begin

Table1.Active:=False;

Table1.ReadOnly:=True;

Table1.Active:=True;

end

else

begin

Table1.Active:=False;

Table1.ReadOnly:=False;

Table1.Active:=True;

end;

end;

При щелчке по кнопке Добавить запись в конец НД будет появляться дополнительное окно формы в модальном режиме для добавления новой записи:

Для этого добавьте к проекту новую форму. Перейдите на первую форму. Выберите в главном меню Delphi пункт меню File, в этом пункте команду Use unit В появившемся окне выберите Unit2. Нажмите ОК. В окне кода программы появится следующий раздел:

implementation

uses Unit2;

Перейдите на вторую форму и выполните аналогичные действия. В окне кода программы появится аналогичный раздел:

implementation

uses Unit1;

Разместите на второй форме четыре компонента DBEdit. Этот компонент представляет собой поле, в котором возможно отображение и изменение его значений.

Расположите на второй форме две кнопки BitBtn. В процессе ввода пользователь может утвердить ввод, нажав кнопку «Ввод», или отменить его, нажав кнопку «Отмена». После закрытия модальной формы ввода проверяется, какая кнопка нажата. Если «Ввод», то сделанные изменения принимаются, в противном случае – нет.

Для окна формы напишите обработчик события OnCreate:

procedure TForm2.FormCreate(Sender: TObject);

begin

DBEdit1.DataSource:=Form1.DataSource1;

DBEdit1.DataField:='Fio';

DBEdit2.DataSource:=Form1.DataSource1;

DBEdit2.DataField:='DataR';

DBEdit3.DataSource:=Form1.DataSource1;

DBEdit3.DataField:='Adres';

DBEdit4.DataSource:=Form1.DataSource1;

DBEdit4.DataField:='NomerChit';

BitBtn1.ModalResult:=mrOk;

BitBtn2.ModalResult:=mrCancel;

end;

Для кнопки «Добавить запись в конец НД» напишите обработчик события OnClick:

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

if table1.ReadOnly=False then

begin

Table1.Append;

if Form2.ShowModal=mrOk then

Table1.Post

else

Table1.Cancel;

end

else

ShowMessage('Редактирование записей запрещено!');

end;

Для кнопки «Вставить запись» – следующую процедуру:

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

if table1.ReadOnly=False then

begin

Table1.Insert;

if Form2.ShowModal=mrOk then

Table1.Post

else

Table1.Cancel;

end

else

ShowMessage('Редактирование записей запрещено!');

end;

Для кнопки «Удалить запись»:

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

if table1.ReadOnly=False then

begin

if Messagedlg('Удалить запись?',

mtConfirmation,[mbYes, mbNo],0)=mrYes then

Table1.delete;

end

else

ShowMessage('Редактирование записей запрещено!');

end;

После щелчка по этой кнопке на экране появляется окно, в котором происходит подтверждение или отказ от удаления текущей записи: