tab_Order.Active:=true;
tab_Order.Locate(...]);//锁定记录
tab_Order.Edit;
tab_Order.FieldByName('FHRQ').Value:=DateToStr(DateTimePicker1.Date);
tab_Order.Post;
  但在执行更新时总是出现nested transactions not supported的错误。但我的tab_Order是单独对一张表打开的,也试过的用exclud=true,但都不行,有没有谁知道什么原因啊!

解决方案 »

  1.   

    nested transactions not supported
    似乎我在delphi的新闻组中看到过,好像是锁的问题,设为Client,sorry太久远了,忘记了
      

  2.   

    nested transactions not supported.你这个表有没有外键关联?
      

  3.   

    但我的tab_Order是单独对一张表打开的,也试过的用exclud=true,但都不行.
    thanks to: firetoucher给了我一点思路,我刚查了一下,问题可能在DataMd.Database.StartTransaction,DataMd.Database.Commit;
    这里,但原码太长了,我只给出结构:
    begin
    try
      DataMd.Database.StartTransaction;
      table1.Active:=true;
      table1.Locate(......);
      table1.Edit;
      table1.FieldByName('FHRQ').Value:=DateToStr(DateTimePicker1.Date);
      table1.Post;
      DataMd.Database.Commit;
      except
        DataMd.Database.rollback;
      end;
    end;
      有没有谁能解释一下怎么回事吗?
      

  4.   

    你使用了不支持嵌套事务的数据库。而在你的设置下post本身会在服务器端启动一个事物,把DataMd.Database.StartTransaction;及相关语句去掉。
      

  5.   

    在DataMd.Database.StartTransaction;句前
    你最好先测试一下事务有否在运行datamd.database.intransaction,如正在运行则退出。
      

  6.   

    在前面加句:
    if DataMd.Database.InTransaction then
       DataMd.Database.commit;
    DataMd.Database.StartTransaction;