Hola kuan-yiu!
Con respecto al tema de no tener tanto tiempo abierta una transacción, leí hace poco una solución propuesta por Lepe en este
hilo que se refiere a los ClientsDataset con cacheUpdates (consigues el efecto que una tabla temporal).
Te dejo un enlace con un ejemplo:
ClientDataSet y DataSetProvider en aplicaciones cliente/servidor
Saludos