参考此链接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重新创建它。问题是如果我发出命令TableUpdate,即使我还没有发出= SQLExec(nConnection,'COMMIT')命令,记录也会提交给MYSQL服务器。我正在使用INNODB引擎。请注意,如果我省略TableUpdate命令,我可以从MYSQL COMMIT或ROLLBACK我的事务。我希望不要删除命令TableUpdate来捕获我的记录中的错误,这样我就不得不在将它提交给MYSQL服务器之前检查记录的错误记录。
感谢。
答案 0 :(得分:0)
您的示例不对FoxPro数据进行任何更改,因此它不需要本地事务处理。如果您之前添加的内容不是因为您在同一笔交易中进行了本地数据更新,而是因为您认为它可能有所帮助,请将其删除。这可能会解决问题。
如果您要在同一事务中进行本地更改,无论如何您都要重新考虑该设计,因为您应该在远程查询完成后进行本地更改。
如果没有解决问题,那么您的问题就是“记录”。得到提交,但你正在更新你的例子中的两个远程视图 - 代码是否只与一个一起工作?如果没有,都会更新吗?如果您回滚第一个会发生什么?如果您正在针对表而不是视图工作呢?这些变化根本不能回滚吗?
如果您能够提供一个可重复性最小的样本,那么您获得答案(甚至是解决方案)的机会要高得多。
答案 1 :(得分:0)
尝试使用autocommit:
SET autocommit = 0
来自MySQl文档:
通过将autocommit变量设置为零来禁用自动提交模式后,对事务安全表(例如InnoDB,BDB或NDBCLUSTER的表)的更改不会立即成为永久更改。您必须使用COMMIT将更改存储到磁盘或ROLLBACK以忽略更改。