Hey man hoy si ya te entendi , de hecho te he entendido porque yo tambien tuve este problema y fijate que por lo menos en mi caso no le encontre solucion mas que ocupando dos tablas , bueno no tanto asi como dos tablas sino un cursor y la tabla real que iba a ocupar porque tenes razon el grid que esta vinculado a una tabla con solo que vos termines de llenar los campos de una fila del grid automaticamente los guarda en la tabla a la que esta vinculada. Yo lo que hice es como vos decis puse el grid vinculado a un cursor temporal y cuando ya me decidia que queria guardar todos los campos que tenia el cursor use el append from para rellenar la tabla con todos los campos del cursor.
Porque de hecho me dio el problema de que una vez que hice un programa de facturacion cuando el usuario queria cancelar la factura el comando revert() no era suficiente para borrar los registros sino que tenia que darles manualmente un delete para que se hechara todos los detalles que ya no queria.
Voy a investigar en esto porque supongo que debe de haber una solucion, pero como vos decis yo creo que todos te dan la respuesta de que uses 2 tablas.
Agregado:
Mira viejo mirate este codigo y voy a tratar de explicartelo para que veas ya me acorde bien y no manejo dos tablas sino que solo una ya me vine a winbugs y abri el foxpro para ver el codigo y manejo una tabla solo que hice la marufiada para el boton de cancelar y esto es lo que he puesto
Ejemplo de el boton cancelar de un formulario de pedidos:
SELECT det_pedidos &&selecciono detalle pedidos
DELETE FROM det_pedidos WHERE n_ped==pedidos.n_ped && que eliminie todos los detallespedidos con el numero en el que estoy.
GO TOP
DO WHILE !EOF()
IF n_ped==pedidos.n_ped
replace n_ped WITH -1
ENDIF
SKIP
IF EOF()
EXIT
ENDIF
ENDDO &&que les cambie a -1 el codigo de pedidos para que no me los muestre en el formulario ya que no hay pedido con codigo -1
TABLEREVERT(.t.,"pedidos") &&que deshaga los cambios en la tabla pedidos
TABLEREVERT(.t.,"correlativos") &&que deshaga los cambios de la tabla correlativos
TABLEREVERT(.t.,"clientesped") &&que deshaga los cambios de la tabla clientes pedidos
select pedidos
go bottom
thisform.refresh
Les pongo -1 al codigo para que estos detalles de pedidos no esten relacionados con ningun pedido, y en un menu herramientas del programa esta la opcion depurar que es con la que despues les doy un pack.