Hoy he tenido que traspasar datos de una tabla a otra, pero con el problema añadido que es que quiero marcar el registro traspasado como procesado.
No he logrado hacerlo como quería con el APPEND FROM .... pues no tenemos el control sobre la tabla origen, y necesito marcarla.
Mirando en la clase DATABASE de FW, me encuentro con un par de funciones que vienen de perlas, pero no hay ejemplo , pues podemos uno;
- Code: Select all Expand view RUN
- USE "ORIGEN" NEW
::oDbfOrigen := TDataBase():New()
USE "DESTINO" NEW
::oDbfDestino := TDataBase():New()
while !::oDbfOrigen:eof()
dbselectarea( ::oDbfOrigen:cAlias )
if !::oDbfOrigen:PROCESADA
hRec := FW_RecToHash( )
dbselectarea( ::oDbfDestino:cAlias )
append blank
FW_HashToRec( hRec )
endif
dbselectarea( ::oDbfOrigen:cAlias )
::oDbfOrigen:PROCESADA := .T.
::oDbfOrigen:Save()
::oDbfOrigen:Skip()
end while
La función FW_RecToHash( ), me devuelve un hash con los datos del registro actual de la tabla activa.
Así, una vez obtenido, cambia a la tabla destino hacemos un append blank, y soltamos el contenido ;
FW_HashToRec( hRec )
A continuación, marca ya en la tabla origen que lo he procesado.
De esta manera, tenemos un control total sobre el traspaso de datos que con APPEND FROM.