Шаг 58.
Работа с локальными БД в Delphi. Навигация в неотфильтрованном НД между записями, удовлетворяющими фильтру (окончание)

    На этом шаге мы дополним разрабатываемое приложение.

    Продолжим работу с нашим приложением. Поместите на главную форму компонент 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;
т.к. при удалении записи курсор смещается к следующей записи, после чего вызывается метод FindNext, смещающий курсор к следующей записи, удовлетворяющей критерию фильтрации. В результате у нас будет удалена только половина подчиненных записей.

    Созданное приложение можно взять здесь.

    Со следующего шага мы начнем рассматривать способы организации поиска записей.




Предыдущий шаг Содержание Следующий шаг