|
Algo que debes tener en cuenta es si los 30 DataSets tienen que estar abiertos al mismo tiempo.
Por ejemplo. Si tienes 10 DataSets para un Formulario de Clientes y 10 DataSets para otro de Pedidos y otros 10 para un formulario de Facturas, podrías abrir la transacción y los DataSets de lo que estés mostrando y cerrar el resto.
Con ese mismo ejemplo, yo tendría tres formularios con su correspondiente DataModule y dentro de el una transacción por cada uno.
- DMPrincipal
--- Database
--- OnCreate: Database.Open;
--- OnClose: Database.Close;
- FMPrincipal
- DMCliente
--- TLocal
--- DataSet, Database = DMPrincipal.Database, Transaction=TLocal
--- OnCreate: Transaction.StarTransaction; DataSet.Open;
--- OnClose: DataSet.Close; Transaction.Commit;
- FMCliente
- DMPedido
--- TLocal
--- DataSet, Database = DMPrincipal.Database, Transaction=TLocal
--- OnCreate: Transaction.StarTransaction; DataSet.Open;
--- OnClose: DataSet.Close; Transaction.Commit;
- FMPedido
- DMFactura
--- TLocal
--- DataSet, Database = DMPrincipal.Database, Transaction=TLocal
- FMFactura
De esta manera, puedes tener 3 transacciones abiertas e ir haciendo Commit y volviendo a abrir solo la que necesitas.
Si todos son necesarios en un mismo momento, puedes hacer un procedimiento que guarde la posición en la que están los Datasets, haga Commit y vuelva a abrir y posicionarlos.
Una tercera opción (y que depende de los datos que tengas) es poner los datos más estáticos (los que no cambian a lo largo del programa) con una transacción y los que si cambian a menudo en otra. De esta manera solo refrescas los que cambian.
Dato que no cambia : Tipo de cliente: MA-Mayorista, MI-Minorista, GS-Grandes superficies
Dato que cambia: Pedido, Detalle de Pedido, etc.
|