我在解析从ClientDatset到TAdoDataset(绑定到访问表)的删除操作时遇到此错误。我正在使用Delphi 2010。
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;
答案 0 :(得分:0)
我和TAdoDataset有同样的问题。没有发现它有什么问题,所以我只是在try中覆盖了方法,除了阻止。
试试这个:
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;
答案 1 :(得分: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;
答案 2 :(得分:0)
对于一些我无法猜测的无法解释的原因,我相信在删除之后,InternalGotoBookmark的书签参数将进入已删除的记录位置......
因此,Linas解决方案可以使事情发挥作用......
但我同意其他人的意见,吞下这个例外很糟糕......
答案 3 :(得分:0)
尝试设置
ResolveToDataSet = False