Excluir registros Mestre-Detalhe

18/12/2020

0

Tenho uma ligação mestre-detalhe com 2 tabelas temporárias de ClientDataSet''s.

O mestre é o Lote e o detalhe são as notas fiscais.

Quero excluir um lote e todas notas fiscais vinculadas mas está ocorrendo o erro abaixo e não estão sendo excluídas as notas fiscais (detalhe):

cdsNotasFiscais: Missing data provider or data packet.


Código que estou usando no botão Excluir:

var
  i: Integer;
begin
  if Application.MessageBox(''Confirma a exclusão do(s) registro(s) selecionado(s)?'', ''Confirmação'',
    MB_YESNO + MB_ICONEXCLAMATION) = mrYes then
  begin
    for i := 0 to DBGrid1.SelectedRows.Count - 1 do
    begin
      DM.cdsNotasFiscais.First;

      while not DM.cdsNotasFiscais.Eof do
        DM.cdsNotasFiscais.Delete;

      DBGrid1.SelectedRows.Delete;
    end;

    DM.cdsNotasFiscais.ApplyUpdates(-1);
    DM.cdsLote.ApplyUpdates(-1);
  end;
end;


O erro ocorre no comando ApplyUpdates.

Relembrando que os Clientdataset''s são temporários e não estou usando DataSetProvider.
Natanael Ferreira

Natanael Ferreira

Responder

Posts

18/12/2020

Natanael Ferreira

Descobri que o código estava excluindo registros incorretos.

Consegui resolver usando Bookmark.

var
  i: Integer;
begin
  if Application.MessageBox('Confirma a exclusão do(s) registro(s) selecionado(s)?', 'Confirmação',
    MB_YESNO + MB_ICONEXCLAMATION) = mrYes then
  begin
    for i := 0 to DBGrid1.SelectedRows.Count - 1 do
    begin
      DM.cdsLote.GotoBookmark(DBGrid1.SelectedRows.Items[i]);

      DM.cdsNotasFiscais.First;

      while not DM.cdsNotasFiscais.Eof do
        DM.cdsNotasFiscais.Delete;

      DM.cdsLote.Delete;
    end;
  end;
end;
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar