参考此链接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。我想用MYSQL和Foxpro使用Remote View重新创建它。问题是,如果我发出命令TableUpdate,即使我还没有发出=SQLExec( nConnection,'COMMIT‘)命令,记录也会提交到MYSQL服务器。我正在使用INNODB引擎。请注意,如果我省略了TableUpdate命令,我可以从MYSQL提交或回滚我的事务。我希望不要删除命令TableUpdate来捕获我的记录中的错误,这样我就不必在提交到MYSQL服务器之前检查记录的错误记录。
谢谢。
发布于 2012-08-28 06:25:47
您的示例不会对FoxPro数据进行任何更改,因此不需要本地事务处理。如果你添加这个并不是因为你在同一个事务中进行本地数据更新,而是因为你认为它“可能有帮助”,那就把它拿出来。这可能会解决这个问题。
如果您无论如何都要在同一事务中进行本地更改,则无论如何都要重新考虑该设计,因为您应该在远程查询完成后进行本地更改。
如果这还不能解决问题,那么您的问题是‘记录’已提交,但您在示例中更新了两个远程视图-代码是否只使用一个视图?如果不是,两个都会更新吗?如果回滚第一个会发生什么?如果你是在一个表而不是一个视图上工作呢?这些更改可以完全不回滚吗?
如果你能拿出一个最小的可重复样本,那么你得到答案(甚至是解决方案)的机会就会高得多。
发布于 2013-02-06 11:54:33
尝试使用自动提交:
SET autocommit=0
从MySQl文档中:
通过将autocommit变量设置为0禁用自动提交模式后,对事务安全表(如InnoDB、BDB或NDBCLUSTER)的更改不会立即永久生效。您必须使用COMMIT将更改存储到磁盘,或使用ROLLBACK忽略更改。
https://stackoverflow.com/questions/12136541
复制相似问题