注:Table_Customer的CachedUpdates属性为True,采用了事务处理方式提交代码如下:
with DM.Table_Customer do
begin
   FieldByName('username').AsString:=UserName;  //UserName为变量,在main中已申明
   FieldByName('regdate').AsDateTime:=Now;
   DM.Database.StartTransaction;  //开始事务
   try
      UpdateRecord;
   except
      DM.Database.Rollback;  //回滚事务
      MessageDlg('操作失败!请与系统管理员联系!',mtError,[mbOK],0);
      exit;
   end;
   DM.Database.Commit;  //提交事务
   CommitUpdates;  //清空该表在客户端的缓冲
   MessageDlg('操作成功!',mtInformation,[mbOK],0);
end;问题:事务处理中的提交并没有提交到数据库中,是哪个地方写错了?感觉不关事务处理的事,问题好象出在事务处理之前

解决方案 »

  1.   

    另外在FieldByName('username').AsString:=UserName;前加上一句:Edit;
      

  2.   

    //用TQuery.ApplyUpdates;事务的正确写法:
    with DM.Table_Customer do
    begin
       Edit;
       FieldByName('username').AsString:=UserName;  //UserName为变量,在main中已申明
       FieldByName('regdate').AsDateTime:=Now;
       Post;
       if not DM.Database.InTransaction then
         DM.Database.StartTransaction;  //开始事务
       try
         ApplyUpdates;
         DM.Database.Commit;  //提交事务
       except
          DM.Database.Rollback;  //回滚事务
          MessageDlg('操作失败!请与系统管理员联系!',mtError,[mbOK],0);
          exit;
       end;
       CommitUpdates;  //清空该表在客户端的缓冲
       MessageDlg('操作成功!',mtInformation,[mbOK],0);
    end;
    //试试我的方法,把这段语句Copy过去直接可用。
      

  3.   

    问题解决了,原来是在try里的UpdateRecord应该改为ApplyUpdates
    谢谢各位,特别感谢hxshun(Shun) ,纠正了我事务处理的隐式错误