¡Hola!
Cita:
Empezado por Rockin
...tengo entendido que el DataSetProvider en el Servidor de Capa Intermedia, es el encargado de activar las transacciones asociadas al DataSet...
|
En efecto, eso hace el componente TDataSetProvider
cuando la conexión no tiene una transacción activa en ese momento. Es decir, si el programa no ha empezado una transacción explícitamente, el componente proveedor la establece y cierra cuando aplica las actualizaciones.
Esto fue lo que me llevó a pensar que tal vez tu programa sí está abriendo una transacción antes de la llamada a ApplyUpdates (probablemente es algo que haga de manera predeterminada alguno de los componentes de conexión que estás usando).
Aquí el código que ejecuta el proveedor en la capa intermedia (unidad Provider.pas):
Código Delphi
[-]
function TDataSetProvider.InternalApplyUpdates(const Delta: OleVariant; MaxErrors: Integer;
out ErrorCount: Integer): OleVariant;
begin
CheckDataSet;
FTransactionStarted := not IProviderSupport(DataSet).PSInTransaction;
if FTransactionStarted then
IProviderSupport(DataSet).PSStartTransaction;
try
CheckResolver;
Resolver.FUpdateTree.InitData(DataSet);
try
Result := inherited InternalApplyUpdates(Delta, MaxErrors, ErrorCount);
finally
Resolver.FUpdateTree.InitData(nil);
end;
finally
if FTransactionStarted then
IProviderSupport(DataSet).PSEndTransaction((ErrorCount <= MaxErrors) or (MaxErrors = -1));
end;
end;
Espero te sea de utilidad, no dejes de retroalimentar el hilo.
Al González.
