对于 Microsoft SQL,如果您使用 Transact SQL BEGIN TRANSACTION,VFP TableUpdate 将立即更新服务器并且您无法进行回滚。相反,您必须通过使用 SQLSetProp 发出隐式手动事务 (DB_TRANSMANUAL) 来启动事务:
nOldTransactionSetting = SQLGETPROP(_screen.sqlserver.handle,"Transactions")
IF nOldTransactionSetting < 0
nOldTransactionSetting = 1
ENDIF
=SQLSetprop(_Screen.sqlserver.handle, "TRANSACTIONS", DB_TRANSMANUAL) && start manual transaction
Begin Transaction && start VFP transaction
lOkToCont = Tableupdate( 2, .T., 'CursorAdapter1' )
If lOkToCont
lOkToCont = Tableupdate( 2, .T., 'CursorAdapter2' )
Endif
If lOkToCont && Commit the transaction on the server and VFP.
=SQLExec( _Screen.sqlserver.handle, 'IF @@TRANCOUNT > 0 COMMIT' )
End Transaction
Else && Rollback the transaction on the server and VFP.
=SQLExec( _Screen.sqlserver.handle, 'IF @@TRANCOUNT > 0 ROLLBACK' )
ROLLBACK
Endif
=SQLSetprop(_Screen.sqlserver.handle, "Transactions", nOldTransactionSetting)
我怀疑你可能必须在 MySql 中做同样的事情。