本质上缓冲机制也是一种事务,应用时只能二者取其一,
对启用了缓冲机制的表,tableupdate(.t.)命令就是事务
提交的表现,在其外层又用了begin transaction显然
多余,这种情况下rollback肯定是不起作用的。

解决方案 »

  1.   

    这样试试
    begin transaction
    select test &&test为表缓冲
    replace all aa with "a89456"
    rollback
      

  2.   

    tab1,tab2二表(都为表缓冲),当tab1保存成功,tab2保存不成功时。tab1,tab2
    全部回滚.该如何处理.
      

  3.   

    你们试过vfp中begin transaction的帮助文档中的例子:
    CLEAR
    CLOSE DATABASES* Transactions are only supported within a DBC
    OPEN DATABASE (HOME(2) + 'Data\testdata')SET MULTILOCKS ON      && Required for buffering
    USE customer
    =CURSORSETPROP("Buffering",5)
    ? 'The original company field'
    LIST FIELDS cust_id, company NEXT 5
    REPLACE ALL company WITH "***" && Change field contentsBEGIN TRANSACTION
       =TABLEUPDATE(.T.)
       GO TOP
       ? 'The modified company field'
       LIST FIELDS cust_id, company NEXT 5
       ROLLBACK           && Restore original field contents=TABLEREVERT(.T.)
    GO TOP
    ? 'The restored company field'
    LIST FIELDS cust_id, company NEXT 5其中就用了tableupdate()+rollback
    我没有试出来,你们哪?
      

  4.   

    对不起,看来我想当然了。试了例子没问题,是不是没有用
    =CURSORSETPROP("Buffering",5)启用你的表缓冲?
      

  5.   

    更新成功后应该结束事务(END TRANSACTION)否则ROLLBACK,
    看看下面的例子:
    IF MESSAGEBOX(“数据被另一用户所更改是否用编辑结果更新改写”) = MSGBOX_YES
    *Try to force update
      BEGIN TRANSACTION
    m.lSuccess = TABLEUPDATE(.T.,.T.)
    IF m.lSuccess
       END TRANSACTION
       LOOP
    ELSE
       ROLLBACK
       =MESSAGEBOX(“更新失败。”)
    ENDIF
    ENDIF