What Dan says.
Aside of the precautions you should take, you already got to a stage of extracting data as DBF. Well, that's one step too far, you can query with SQLEXEC and turn the result cursor into an updatable cursor with several CURSORSETPROPS setting remote table, keyfields, updatablefieldlist, etc and then can do the core VFP data persisting command TABLEUPDATE. It acts on a DBF or remote backend by applying the buffered changes, all new, all changed and all delted rows are processed, so you can make any change to the remote backend.
If you're that far an easy way to APPEND data as usual is:
1. Query into a cursor with a statement like SELECT * FROM table WHERE 1=0, meaning you pull no data at all, but get the table schema/structure in a VFP cursor.
2. Make it updatable
3. APPEND to it as you'd do to any normal cursor or DBF
4. TABLEUPDATE()
The cursoradapter could also be helpful, as you just need the same connection string as with SQLSTRINGCONNECT and the cursoradapter builder can help you to make the cursor updatable in an interactive way, easier than via several CURSORSETPROP() calls. Then creating the cursoradapter can replace step 1 and 2, if you configure it to create its cursor at initialisation automatically.
Bye, Olaf.