首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foxpro和MYSQL应用程序中的事务

问Foxpro和MYSQL应用程序中的事务
EN

Stack Overflow用户
提问于 2012-08-27 13:17:46
回答 2查看 2.3K关注 0票数 0

参考此链接http://msdn.microsoft.com/en-us/library/ms947432.aspx

示例代码,我认为它可以工作,因为它发布在Microsoft的网站上。

代码语言:javascript
复制
&& 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服务器之前检查记录的错误记录。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-08-28 06:25:47

您的示例不会对FoxPro数据进行任何更改,因此不需要本地事务处理。如果你添加这个并不是因为你在同一个事务中进行本地数据更新,而是因为你认为它“可能有帮助”,那就把它拿出来。这可能会解决这个问题。

如果您无论如何都要在同一事务中进行本地更改,则无论如何都要重新考虑该设计,因为您应该在远程查询完成后进行本地更改。

如果这还不能解决问题,那么您的问题是‘记录’已提交,但您在示例中更新了两个远程视图-代码是否只使用一个视图?如果不是,两个都会更新吗?如果回滚第一个会发生什么?如果你是在一个表而不是一个视图上工作呢?这些更改可以完全不回滚吗?

如果你能拿出一个最小的可重复样本,那么你得到答案(甚至是解决方案)的机会就会高得多。

票数 0
EN

Stack Overflow用户

发布于 2013-02-06 11:54:33

尝试使用自动提交:

SET autocommit=0

从MySQl文档中:

通过将autocommit变量设置为0禁用自动提交模式后,对事务安全表(如InnoDB、BDB或NDBCLUSTER)的更改不会立即永久生效。您必须使用COMMIT将更改存储到磁盘,或使用ROLLBACK忽略更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12136541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档