为什么数据不回滚?

GEORGECHIN1 2014-11-27 08:35:17
代码如下,请问原因在哪呢?
USE LIST_BOM
CURSORSETPROP("Buffering",5)
CURSORSETPROP("SendUpdates",.T.)
DBSETPROP("CMADE","CONNECTION","Transactions",2)
INSERT INTO LIST_BOM (成品料号,料号) VALUES (PARTNO,LH)
BEGIN TRANSACTION
SQLEXEC(GN_CONNHANDLE,"BEGIN TRANSACTION") &&返回结果为1
IF TABLEUPDATE(.T.)
SQLEXEC(GN_CONNHANDLE,"IF @@TRANCOUNT>0 COMMIT")
END TRANSACTION
ELSE
SQLEXEC(GN_CONNHANDLE,"IF @@TRANCOUNT>0 ROLLBACK") &&返回结果为1,但后端的数据并没有得到回滚!
ROLLBACK &&前台VFP数据也得不到回滚
ENDI


...全文
499 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
GEORGECHIN1 2014-11-30
  • 打赏
  • 举报
回复
首先谢谢版主!
现找到数据不回滚的原因了,是因为连接句柄不正确!现在的问题变为,为什么每打开一个视图,其连接句柄就会加1,而我建立远程视图时,其有加share的定义,而且dbgetprop("list_bom","view","share connection")返回为.t.,现要怎样设置,才在打开多个视图时,其连接句柄都一样,以便事务处理的开始和结束各只需发一条SQL命令即可?
GEORGECHIN1 2014-11-30
  • 打赏
  • 举报
回复
引用 2 楼 u011120096 的回复:
首先谢谢版主! 现找到数据不回滚的原因了,是因为连接句柄不正确!现在的问题变为,为什么每打开一个视图,其连接句柄就会加1,而我建立远程视图时,其有加share的定义,而且dbgetprop("list_bom","view","share connection")返回为.t.,现要怎样设置,才在打开多个视图时,其连接句柄都一样,以便事务处理的开始和结束各只需发一条SQL命令即可?
以下方法测试的结果是这样: CREA SQL VIEW LIST_BOM CONN CMADE SHARE AS SELE * FROM LIST_BOM CREA SQL VIEW BOM CONN CMADE SHARE AS SELE * FROM BOM SELE 1 USE LIST_BOM CURSORGETPROP("ConnectHandle") &&返回3 USE BOM CURSORGETPROP("ConnectHandle") &&也返回3 ?这种情况是共享连接句柄了吗? 以下方法测试的结果是这样: SELE 1 USE LIST_BOM CURSORGETPROP("ConnectHandle") &&返回3 SELE 2 USE BOM ?CURSORGETPROP("ConnectHandle") &&返回4 *这种换成两个工作区同时打开后,句柄返回值就不一样,这个又代表什么呢?要怎样才能让这两个甚至更多的视图同时打开时返回同一个连接句柄,以便数据无论是有效提交还是无效回滚发一条SQL语句就可以,而不是要每一个连接句柄都要发送。 以下方式测试的结果是这样: SQLEXEC(GN_CONNHANDLE,"SELECT * FROM BOM","TEST") &&连接句柄是用SPT建立获得的 CURSORGETPROP("ConnectHandle") &&返回2 USE BOM CURSORGETPROP("ConnectHandle") &&返回3 ?这又是一种什么情况呢?
十豆三 2014-11-29
  • 打赏
  • 举报
回复

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧