“BOF或EOF为True或当前记录已被删除。”上的ApplyUpdates错误包含删除操作
-
13-09-2019 - |
题
我在解析删除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
不隶属于 StackOverflow