0

我在解决从 ClientDatset 到 TAdoDataset(绑定到访问表)的删除操作时遇到此错误。我正在使用德尔福 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;
4

4 回答 4

0

我对 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;
于 2009-12-07T16:59:31.863 回答
0

我不得不绕过提供者并手动应用删除操作。它在调试模式下保持错误,但我可以忍受。

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;
于 2009-12-14T00:30:44.567 回答
0

对于一些我无法猜测的莫名其妙的原因,我相信在删除 InternalGotoBookmark 的书签参数后会转到删除的记录位置......

所以,Linas 的解决方案会让事情顺利进行......

但我同意其他人的观点,吞下例外是不好的......

于 2010-01-18T15:25:13.850 回答
0

尝试设置

ResolveToDataSet = False
于 2010-05-02T23:44:19.133 回答