我做了一个程序,其中用到了数据库事务,但不能实现,为什么,代码如下:
try
    with DM do           //DM是个数据模块
    begin
      Database1.StartTransaction;
      T_Leechdom.Open;   //T_Leechdom是DM中的一个Table
      T_Day_Table.Insert;   //T_Day_Table是DM中的一个Table
T_Day_Table.AppendRecord([Q_Day_Query.FieldByName('MID').AsString,Q_Day_Query.FieldByName('药名').AsString,StrtoInt(FE_Count.Text),Q_Day_Query.FieldByName('零售价').AsCurrency,StrToCurr(FE_Sum.Text),Now]);     //FE_Count是个控件,记录了用户输入的数量
      T_LeechDom.Locate(Q_Day_Query.FieldByName('MID').Name,Q_Day_Query.FieldByName('MID').AsString,[]);
      T_Leechdom.Edit;
      T_Leechdom.FieldByName('数量').AsInteger:=T_Leechdom.FieldByName('数量').AsInteger-StrToInt(FE_Count.Text);
      T_Leechdom.Post;
      DataBase1.Commit;
    end;
  except
    Beep;
    MessageDlg('该动作出现错误,不能完成该动作',mtError,[mbok],0);
    DM.Database1.Rollback;
  end;
本程序实现在记录用户购买药品的数量的同时,从药品库中减去用户购买的数量
为什么该程序在T_Leechdom中字段的数量值没有改变
我用的不是缓存方式

解决方案 »

  1.   

    从现在看,看不出什么问题,不过建议你跟进程序里面看看是不是根本就没有到commit而是到了rollback。或者跟到commit处,然后检查数据库看有没有变化,如果是sql server可以检查一下事务管理器,看看当前有没有这个事务在提交数据
      

  2.   

    程序看不出问题,有可能是你的
    T_LeechDom.Locate(Q_Day_Query.FieldByName('MID').Name,Q_Day_Query.FieldByName('MID').AsString,[]);
    没有查找到记录