このリンクを参照してhttp://msdn.microsoft.com/en-us/library/ms947432.aspx
Microsoft のサイトに掲載されているので動作すると思われるサンプルコードです。
&& Start a VFP transaction and a transaction on the server.
Begin Transaction && FoxPro Start Trans Command
=SQLExec(nConnection, 'BEGIN TRANSACTION') && SQL Start Trans Commnad
&& Update changes to MyTable.
lEverythingOK = TableUpdate( 2, .F., 'rv_MyView' )
If lEverythingOK
&& Update changes to MyOtherTable.
lEverythingOK = tableupdate( 2,.F.,'rv_MyOtherView')
EndIf
&& End the transaction on the server and VFP.
If lEverythingOK
=SQLExec(nConnection, 'COMMIT') && SQL COMMIT COMMAND
End Transaction && Foxpro COMMIT COMMAND
Else
=SQLExec( nConnection, 'ROLLBACK' ) && SQL ROLLBACK COMMAND
RollBack && FoxPro ROLLBACK COMMAND
EndIf
このサンプルは、リモート ビューを使用する MS SQL および Foxpro に基づいています。Remote View を使用して MYSQL と Foxpro を使用してこれを再現したかったのです。問題は、TableUpdate コマンドを発行すると、=SQLExec( nConnection, 'COMMIT' ) コマンドをまだ発行していなくても、レコードが MYSQL サーバーにコミットされることです。INNODBエンジンを使用しています。Pls TableUpdate コマンドを省略すると、MYSQL からトランザクションを COMMIT または ROLLBACK できることに注意してください。コマンド TableUpdate を削除してレコードのエラーをトラップしないようにしたかったので、MYSQLサーバーにコミットする前にレコードごとにエラーレコードをチェックする必要がありませんでした。
ありがとう。