OK, next suggestions:
Another way to pass data might be by creating tables.
Cursors are really private to a datasession; each Form (private datasessions) functions (more or less) like a separate user.
But you can create a table in Form A, and open it in Form B.
To create a unique name (to avoid conflicts with other users, or other instances of the form), use the function sys(2015). And, unlike a cursor, you must remember to kill it later.
You might pass the name of the table as a parameter, when invoking Form B. Or, set a property:
loCalledForm.cTempTableName = ThisForm.cTempTableName
>Yes, I could use the same datasession, but I don't really want to -- Form B creates some cursors on its own, sets various relations and all that, so I'd really like it to have its own datasession.
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)