ошибка “либо bof, либо eof имеет значение true, либо текущая запись была удалена ..” при applyupdates, содержащая операцию удаления

StackOverflow https://stackoverflow.com/questions/1859609

Вопрос

Я получаю эту ошибку при разрешении операции удаления из ClientDatset в TADODataSet (которая привязана к таблице access).Я использую 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;
Это было полезно?

Решение 2

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

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;

Другие советы

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

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

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;

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

Таким образом, решение Linas заставило бы эту штуку работать...

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

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

ResolveToDataSet = False
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top