Siguiendo la línea de roman, usa FlushBuffers en el AfterPost, despues cierra la tabla y la copias.
Si aún sigue dando fallos, puedes ir por la caché de escritura de windows en segundo plano, por defecto está activa y no fuerza la escritura a disco.
Acabo de subir el
truco 352 que permite ver el estado de la caché en windows y desactivarla.
En cuanto al TBatchMove, es un método del TTable, simplemente tienes que darle un Dataset con los datos a insertar, y el método de inserción, (la tabla de destino debe existir, es decir, usa el Database desktop para copiarla, y despues borra sus registros):
En el siguiente ejemplo, creo una Qry seleccionando los datos, y despues se añaden a la tabla tblFacturasH (histórico de facturas).
Ten cuidado con el orden al insertar registros si usas relaciones Master-Detail, como siempre, primero se inserta en el Maestro y despues en el Detalle:
Código Delphi
[-]
qry := Tquery.Create(NIL);
try
qry.DatabaseName := DTM.tblFacturas.DatabaseName;
qry.SessionName := DTM.tblFacturas.SessionName;
qry.SQL.Clear;
qry.SQL.Add('select * from Factura where nfactura = ' + QuotedStr('22235') + ';');
qry.Prepare;
qry.Open;
if not qry.IsEmpty then
dtmH.tblFacturasH.BatchMove(qry, batAppendUpdate);
qry.Close;
finally
FreeAndNil(qry);
end;
Estudia los parámetros que lleva el BatchMove para usar el que necesites.
Saludos y suerte.