Cita:
|
Empezado por mamcx
La cosa es simple: O lo haces en linea o en batch. No se puede mezclar.
|
Gracias por la info.
Justamente, como trabajo con BATCHUPDATE todas las operaciones se hacen off-line de la BD. Lo que intuyo es que con ADO en este metodo, el comando UPDATE "registrado" es el ultimo enviado y no todos los que se emitan.
Como información adicional, todos los dataset estan cargados y desvinculados de sus conexiones.
Te hago un ejemplo de forma muy escueta de lo que tengo:
Código:
//---------------------
//cCod y nStock son variables globales cargadas en distintas situaciones.
//---------------------
Procedure Vender;
begin
cCOD:= ADODataSetPRODUCTOS.FiledByName('Codigo').AsString; //Var global
nStock:= ADODataSetPRODUCTOS.FiledByName('Cantidad').AsInteger; //Var global
ADODataSetDETALLEFACTURA.Insert;
ADODataSetDETALLEFACTURA.FiledByName('Codigo').AsString:= cCOD;
ADODataSetDETALLEFACTURA.FiledByName('Cantidad').AsInteger:= nCantPedida;
ADODataSetDETALLEFACTURA.Post;
ADOCommand1.Commantext:='UPDATE Productos SET Cantidad= :Param1 WHERE Codigo=:Param2;';
ADOCommand1.Parametres[0]:= (nStock - nCantPedida);
ADOCommand1.Parametres[1]:= cCod;
ADOCommand1.Execute;
end;
Procedure Borrar:
begin
//nStock viene con la cantidad actual resultante en Productos.
MiCOD:= ADODataSetDETALLEFACTURA.FiledByName('Codigo').AsString;
MiCant:= ADODataSetDETALLEFACTURA.FiledByName('Cantidad').AsInteger;
ADODataSetDETALLEFACTURA.Delete;
ADOCommand1.Commantext:='UPDATE Productos SET Cantidad= :Param1 WHERE Codigo=:Param2;';
ADOCommand1.Parametres[0]:= (nStock + MiCant);
ADOCommand1.Parametres[1]:= MiCod;
ADOCommand1.Execute;
end;
================
Procedure Registrar;
begin
ADOConnection.ConnectionString:= MiConexion;
ADODataSetPRODUCTOS.ConnectionString:= ADOCOnnection;
ADODataSetPRODUCTOS.Active:= True;
ADODataSetDETALLEFACTURA.ConnectionString:= ADOCOnnection;
ADODataSetDETALLEFACTURA.Active:= True;
ADOCommand1.BeginTrans;
TRY
ADODataSetProductos.UpdateBatch;
ADODataSetDETALLEFACTURA.UpdateBatch;
ADOCommand1.CommitTrans;
EXCEPT
ADOCommand1.RollBackTrans;
END;
ADOConnection.Active:= False;
end;
===============