舉個簡單的例子,謝謝
我在書上看到用starttransaction
可是運行會出現
no user transaction is currently in progress這個錯誤

解决方案 »

  1.   

    比如說:query1,query2分別對一個數據庫的兩個表進行操作。比如都要新增一條記錄。
    但要求query1,query2的新增必需一起成功,不然就取消操作,都不新增。不能只完成其中一個。
    就是這樣。
      

  2.   

    那是因为你并没有启动事务,可以用如下方法:try
      query1.Database.StartTransaction;//启动事务
      //写库操作
      if 操作成功 then
      begin
        query1.Database.Commit;//成功则提交
      end
      else begin
        query1.Database.Rollback;//异常也回滚
        //出错信息提示
      end
    except
      //异常提示
      query1.Database.Rollback;
    end;不过在数据库编程上,现在基本不用BDE,除非非技术因素或者数据库不提供OLEDB。ADO是目前比较好的选择。
      

  3.   

    不管是這麼寫,
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      query1.First ;
      try
        query1.Database.StartTransaction ;
        query1.Delete ;
        query1.Database.Commit ;
      except
        query1.Database.Rollback ;
      end;
    end; 是這麼寫:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       query1.First ;
       query1.Delete ;
       try
         Database1.StartTransaction ;
         query1.ApplyUpdates ;
         query1.CommitUpdates ;
          Database1.Commit ;
       except
         Database1.Rollback ;
         query1.CancelUpdates ;
       end;
    end;都是發生no user transaction is currently in progress這個錯誤。
    也就是說在執行starttransaction 這句就產生錯誤了。
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      query1.First ;
      try
        if not query1.Database.InTransaction then 
        begin
          query1.Database.StartTransaction ;
          query1.Delete ;
          query1.Database.Commit ;
        end;
      except
        query1.Database.Rollback ;
      end;
    end;这样应该行了
      

  5.   

    還是不行,一樣的錯誤
    在執行query1.Database.StartTransaction ;產生錯誤,提示信息為
    "the transation isolation level must be dirty read for local databases"
    然後程序跳到query1.Database.Rollback ;
    再產生錯誤no user transaction is currently in progress