在VFP中使用RollBack,为何没有撤消修改?VFP对事务的支持体现在哪里?

guoxiaoqin 2004-10-26 02:27:18
在VFP的Command Window中先使用Start Transaction,然后使用Update修改某个字段值,最后使用RollBack,但修改并未撤消。而且Commit命令不能被识别。请问这是为什么?VFP对事务的支持体现在哪里?
...全文
71 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
LAIYANGPJ 2004-10-27
  • 打赏
  • 举报
回复
应该是这样:
SQLEXEC(句柄,"GEGIN TRAN")
.
.
.SQLEXEC(句柄,"COMMIT TRAN")
LAIYANGPJ 2004-10-27
  • 打赏
  • 举报
回复
SQLEXEC(句柄,"GEGIN TRAN")
.
.
.SQLEXEC(句柄,"END TRAN")
guoxiaoqin 2004-10-27
  • 打赏
  • 举报
回复
多谢两位星级兄弟。我打开的是DBF文件,所以不能撤消。还有一小问题:提交命令是什么,Commit不能被识别。
guoxiaoqin 2004-10-27
  • 打赏
  • 举报
回复
我已查到:end transaction就是提交。多谢了
LAIYANGPJ 2004-10-27
  • 打赏
  • 举报
回复
sqlexec(e:\vfpdatabase\vfpdatabasetest.dbc,"begin tran")应为:
sqlexec(句柄,"begin tran")
&&"句柄"就是上面说的.
LAIYANGPJ 2004-10-27
  • 打赏
  • 举报
回复
这个语句不对啊!
这应该是用SQLCONNECT()或SOLSTRINGCONNCET()得到的句柄
guoxiaoqin 2004-10-27
  • 打赏
  • 举报
回复
我是这样写的
sqlexec(e:\vfpdatabase\vfpdatabasetest.dbc,"begin tran")
提示如下
Function name is missing).
麻烦再看一下,感激。
LAIYANGPJ 2004-10-26
  • 打赏
  • 举报
回复
你应该在事务之前加上SET MULTILOCKS ON试一下.
十豆三 2004-10-26
  • 打赏
  • 举报
回复
1、你写一个PRG试一试?

2、参考:
取消当前事务期间所做的任何修改。

ROLLBACK
备注
ROLLBACK 将表、表备注文件和索引文件恢复到事务开始前的状态。

当在事务处理中修改一个数据库中的记录时,网络上的其他用户在结束事务前不能访问(不论是读还是写)这些记录。

当网络上的其他用户要访问事务中修改过的记录时,必须等到事务结束之后。在可以访问记录前,他们会收到“记录不可用...,请稍候”的信息。正因为如此,使事务持续的时间尽可能短或者在其他用户不需访问时再执行事务就特别重要。

ROLLBACK 恢复当前事务期间所做的任何修改。如果事务是嵌套的,则只恢复自前一个 BEGIN TRANSACTION 命令起所做的修改,恢复后,程序继续执行下面的语句。

如果事务处理期间给一个记录或文件加了锁,则这些锁将被解除。

示例
在下例中, 打开 testdata 数据库中的 customer 表。为 customer 表设置开放式表缓存。显示 cust_id 和 company 字段内容, 然后用缓存中的数据替换 company 字段内容。

然后执行 begin transaction 命令开始一个事务。事务处理期间,先显示出 cust_id 和 company 字段的内容,然后更新 company 字段的内容,并将新的内容显示出来。接着执行 rollback 命令恢复 company 字段原来的内容,并再次把 cust_id 和 company 字段显示出来,其中的 company 已恢复了原有的内容。

CLOSE DATABASES
CLEAR

* 事务处理只支持数据库
OPEN DATABASE (HOME(2) + 'Data\testdata')

SET MULTILOCKS ON && 请求缓存

USE customer
=CURSORSETPROP("Buffering",5)
? '原始的 company 字段'
LIST FIELDS cust_id, company NEXT 5
Replace All company WITH "***" && 修改字段内容

BEGIN TRANSACTION
=TABLEUPDATE(.T.)
GO TOP
? '修改后的 company 字段'
LIST FIELDS cust_id, company NEXT 5
ROLLBACK && 恢复原始的字段内容

=TABLEREVERT(.T.)
GO TOP
? '恢复后的 company 字段'
LIST FIELDS cust_id, company NEXT 5
发帖
VFP

2576

社区成员

VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
帖子事件
创建了帖子
2004-10-26 02:27
社区公告
暂无公告