“BOF或EOF为True或当前记录已被删除。”上的ApplyUpdates错误包含删除操作

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

我在解析删除ClientDatset操作TAdoDataset(其结合到访问表)收到这个错误。我使用的Delphi 2010。

我的TClientdataSet和TAdoDataset之间DataSetProvider的:

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同样的问题。还没有发现有什么不对的地方,所以我只是在overrided尝试的方法,除了块。

尝试这种情况:

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的书签参数后,将已删除的记录位置...

所以,利纳解决方案将使事情工作...

但我同意其他人,吞咽异常是坏的......

尝试设置

ResolveToDataSet = False
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top