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

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

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий