«либо bof, либо eof имеет значение true или текущая запись была удалена ..» ошибка applyupdates, которая содержит операцию удаления - PullRequest
0 голосов
/ 07 декабря 2009

Я получаю эту ошибку при разрешении операции удаления из ClientDatset в TAdoDataset (который привязан к таблице доступа). Я использую Delphi 2010.

Мой DatasetProvider между TClientDataset и TAdoDataset:

object dspTarifeler: TDataSetProvider
  DataSet = DM.qryTarifeler    
  ResolveToDataSet = True
  Options = [poPropogateChanges, poUseQuoteChar]
end

Ошибка возникает в этой функции, которая вызывается TDataSetResolver.EndUpdate ();

procedure TCustomADODataSet.InternalGotoBookmark(Bookmark: Pointer);
begin
  Recordset.Bookmark := POleVariant(Bookmark)^;
end;

Ответы [ 4 ]

0 голосов
/ 03 мая 2010

Попробуйте установить

ResolveToDataSet = False
0 голосов
/ 14 декабря 2009

Мне пришлось обойти провайдера и применить операцию удаления вручную. он сохраняет ошибку в режиме отладки, но я могу жить с этим.

procedure Tfrm.dspTarifelerBeforeUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
  var Applied: Boolean);
begin
  if updatekind = ukDelete then
  begin
   if dm.qryTarifeler.Locate('Prefix',DeltaDs['Prefix'],[]) then
      dm.qryTarifeler.Delete;
   applied := true;
  end;
end;
0 голосов
/ 18 января 2010

По какой-то необъяснимой причине, о которой я не могу догадаться, я считаю, что после удаления параметр закладки закладки InternalGotoBookmark перемещается в положение удаленной записи ...

Итак, решение Linas заставит эту штуку работать ...

Но я согласен с другими, глотать исключение плохо ....

0 голосов
/ 07 декабря 2009

У меня была такая же проблема с TAdoDataset. Я не нашел, что с ним не так, поэтому я просто переопределил метод в try, кроме block.

Попробуйте это:

TADODataset = class(ADODB.TADODataSet)
  public
    procedure InternalGotoBookmark(Bookmark: Pointer); override;
  end;

{ TADODataset }

procedure TADODataset.InternalGotoBookmark(Bookmark: Pointer);
begin
  try
    inherited InternalGotoBookmark(Bookmark);
  except

  end;
end;
...