你确信AdoQ 的connection 是AdoC吗

解决方案 »

  1.   

    Try
            AdoC.Open;
            AdoC.beginTrans;
            ADOQ.Connection:=ADOC //这句话别忘了
      

  2.   

    你的這段代碼應該寫在sql server裡面才好處理一些
      

  3.   

    把要處理的代碼全部寫在存儲過程裡面,如果成功返回1,失敗返回0例好:
    CREATE PROC dbo.procInsert 
    (@orderNo varchar(4),@orderName varchar(20),@orderNum numeric(10,2))
    AS
    BEGIN TRAN
    SET NOCOUNT ON
    SET ANSI_WARNINGS OFFINSERT INTO  dbo.TabX(order_no,order_name,order_num)
    VALUES(@OrderNo,@OrderName,@OrderNum)
    IF @@ERROR<>0  GOTO errhandleINSERT INTO  opendatasource('sqloledb','data source=sprogram;user ID=develop;Password=12345').數據庫名.dbo.TabY(order_no,order_name,order_num)
    VALUES(@OrderNo,@OrderName,@OrderNum)
    IF @@ERROR<>0  GOTO errhandle
    COMMIT TRAN
    SELECT 1errhandle:
    IF @@ERROR<>0
    BEGIN
    ROLLBACK TRAN
    SELECT 0
    ENDGO--成功返回1,失敗返回0
      

  4.   

    看不懂depphi代码,
    不过,你的代码中似乎没有错误处理的代码,B表处理失败时,程序会跳到那里去执行呢? 会自动跳到回滚事务那块么? 如果不会,那你应该加错误处理代码(例如VB中就要用on error 控制错误跳转)
      

  5.   

    AdoC.Open?这个ADOC是ADOConnection么?
    有个Open方法?ADOCOnnection1.Active := True;
    ADOConnection1.BeginTran;
    Try
      ...
      ADOConnection1.CommitTran
    Except
      ADOConnection1.RollBack;
    end;
      

  6.   

    应该回滚的,仔细检查。
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Try
        Adoconnection1.Open;
        Adoconnection1.BeginTrans;
           begin
              adoquery1.Close;
              adoquery1.SQL.Clear;
              adoquery1.SQL.Add('select top 1 * from test' );
              adoquery1.Open;
              adoquery1.Append;
              adoquery1.FieldByName('A').AsInteger:=8888;
              adoquery1.FieldByName('B').AsInteger:=4444;
              adoquery1.Post;
              end;
            begin
              adoquery1.Close;
              adoquery1.SQL.Clear;
              adoquery1.SQL.Add('select top 1 * from tt' );
              adoquery1.Open;
              adoquery1.Append;
              adoquery1.FieldByName('A').AsInteger:=37;//违返主键约束
              adoquery1.FieldByName('B').AsInteger:=44;
              adoquery1.Post;
              end;
       adoconnection1.CommitTrans;
       except
          adoconnection1.RollbackTrans;
          end;
    end;
      

  7.   

    谢谢大家的热心帮助,经检查,是落了 ADOQ.Connection:=ADOC 造成的,真是太大意了!同时解答几个问题:
    1、VB 的 ON ERROR GOTO,在DELPHI中是 TRY .. EXCEPT .. END
    2、ADOC中有OPEN方法;谢谢大家了,大家太热心了,送分感谢!! :)