ufff, no reinventemos la rueda...
veamos, segun lo veo yo la solución de usar controles no dataware complica la programación y ofrece menos flexibilidad. Lo de usar transacciones me parece que es como matar moscas a cañonazos, asi que se me ocurren un par de soluciones:
1 usar el MemoryTable de las Rx, aunque el proceso de copiar los registros deberias implementarlo tu a mano.
2 usar ClientDataset con el modelo de briefcase. Esta es la que mas me gusta ^_^ simplemente saca un Clientdatase y un provider, en el momento de abrir la consulta los conectas y luego los desconectas:
Código Delphi
[-]
...
DataSetProvider1.DataSet:=Query1;
ClientDataSet1.ProviderName:=DataSetProvider1.Name;
ClientDataSet1.FetchOnDemand:=false;
ClientDataSet1.Active:=true;
DataSetProvider1.DataSet:=nil;
...
y encima tienes la posibilidad de grabar a XML