Maybe the first line (2nd sentence) of the documentation for BEGIN TRANSACTION will help:
Transactions are supported only for tables in a database.
>Hey all,
>
>I am mightily confused. Consider, if you will, the following code:
>
>
>CLOSE DATABASES ALL
>
>SET MULTILOCKS ON
>
>USE c:\docket SHARED
>
>CURSORSETPROP('Buffering', 5, 'docket')
>
>SUSPEND
>
>SELECT docket
>UPDATE docket SET case_no = 'FOUR'
>BEGIN TRANSACTION
>IF TABLEUPDATE(.T., .T., 'docket')
> ROLLBACK
> TABLEREVERT(.T., 'docket')
>ENDIF
>
>RETURN .T.
>
>
>Pretty simple, right? I am testing if a ROLLBACK will work to stop changes in the docket work area.
>
>After the SUSPEND, I step through. After the UPDATE statement, I use another session of VFP to look at the docket table. No changes yet. Good. That's what I expect, as the buffered cursor is holding the changes, not the table.
>
>Then I BEGIN TRANSACTION and do a TABLEUPDATE(). After the TABLEUPDATE I check my table again from the other VFP session. The changes are there. I find this sort of weird, since most transactions stop writing from occuring in the first place instead of trying to take it back later. No matter, I figure Fox must do it differently, rolling back the changes in the event of a ROLLBACK.
>
>So, I step one more line and execute the ROLLBACK. My data in the other session still shows the changes after a complete close and re-open of the table. The changes are there. What is going on? ROLLBACK appears to be entirely ineffectual! The TABLEREVERT() was added in just because I saw it in the help file, but it doesn't make any difference, and I wouldn't expect it to as far as the back-end data goes.
>
>Can anyone tell me what I am forgetting? A SET command? Something else with CURSORSETPROP()? I am sure I have had transaction working before, and now I can't even get the simplest example to work...
>
>Please help! I appreciate it! (Dan, if you are reading, don't laugh at my stupidity...this really has me stumped right now... *smile*)
>
>JoeK