“BOF o EOF es verdadero o el registro actual ha sido eliminado ..” error en ApplyUpdates que contiene una operación de eliminación
-
13-09-2019 - |
Pregunta
Estoy consiguiendo este error al resolver operación de eliminación de ClientDatset a TAdoDataset (que une acceder a la tabla). Estoy utilizando Delphi 2010.
Mi DataSetProvider entre TClientDataset y TAdoDataset:
object dspTarifeler: TDataSetProvider
DataSet = DM.qryTarifeler
ResolveToDataSet = True
Options = [poPropogateChanges, poUseQuoteChar]
end
Error se produce en esta función que es llamada por TDataSetResolver.EndUpdate ();
procedure TCustomADODataSet.InternalGotoBookmark(Bookmark: Pointer);
begin
Recordset.Bookmark := POleVariant(Bookmark)^;
end;
Solución 2
he tenido que pasar por alto el proveedor y aplicar operación de eliminación manual. se mantiene en modo de depuración de errores, pero puedo vivir con eso.
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;
Otros consejos
He tenido el mismo problema con TAdoDataset. No puede encontrar lo que está mal con él, por lo que sólo overrided el método de prueba, excepto bloque.
Prueba esto:
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;
Por alguna causa inexplicable que no puedo adivinar, yo creo que después de que el eliminar el parámetro marcador de InternalGotoBookmark va a la posición de registro eliminado ...
Por lo tanto, la solución de Linas haría que el trabajo de la cosa ...
Pero estoy de acuerdo con otros, tragando la excepción es malo ....
Trate de establecer
ResolveToDataSet = False