"либо bof, либо eof имеет значение true или текущая запись была удалена.." ошибка applyupdates, которая содержит операцию удаления
Я получаю эту ошибку при разрешении операции удаления из ClientDatset в TAdoDataset (который привязан к таблице доступа). Я использую 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;
4 ответа
Мне пришлось обойти провайдера и применить операцию удаления вручную. он сохраняет ошибку в режиме отладки, но я могу жить с этим.
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, кроме block.
Попробуй это:
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 перемещается в положение удаленной записи...
Таким образом, решение Линас заставит вещь работать...
Но я согласен с другими, глотание исключения это плохо....