На этом шаге мы дополним разрабатываемое приложение.
Продолжим работу с нашим приложением. Поместите на главную форму компонент TButton и присвойте его свойству Caption значение "Удалить", после чего напишите для этой кнопки следующий обработчик:
procedure TForm1.Button4Click(Sender: TObject); begin if DataModule2.TableClass.State = dsBrowse then if MessageDlg('Вы действительно хотите удалить запись?', mtConfirmation,[mbYes,mbNo],0) = mrYes then begin DataModule2.TablePupils.Filter:='[Class]=' +''''+DataModule2.TableClassClass.Value +''''; //Визуализация изменения НД DataModule2.TablePupils.DisableControls; while(DataModule2.TablePupils.FindFirst) do DataModule2.TablePupils.Delete; DataModule2.TableClass.Delete; DataModule2.TablePupils.EnableControls; end; end;
В этом участке кода задается критерий фильтра, для НД TablesPupils, он имеет вид [Class] = 'Значение поля Class текущей записи НД TablesClass'.
Затем программа пытается установить курсор на первую запись НД TablePupils, удовлетворяющую фильтру, и удалить его. Это действие происходит до тех пор, пока не будут удалены все записи, удовлетворяющие критерию фильтрации.
Обратите внимание, что мы не можем использовать для каскадного удаления следующий алгоритм:
procedure TForm1.Button4Click(Sender: TObject); begin if DataModule2.TableClass.State = dsBrowse then if MessageDlg('Вы действительно хотите удалить запись?', mtConfirmation,[mbYes,mbNo],0) = mrYes then begin DataModule2.TablePupils.Filter:='[Class]='+'''' +DataModule2.TableClassClass.Value +''''; DataModule2.TablePupils.DisableControls; if DataModule2.TablePupils.FindFirst then repeat DataModule2.TablePupils.Delete; until not FindNext; DataModule2.TableClass.Delete; DataModule2.TablePupils.EnableControls; end; end;
Созданное приложение можно взять здесь.
Со следующего шага мы начнем рассматривать способы организации поиска записей.