我用以下代码:
ADOConnection1.BeginTrans;
try
   ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add(...);  //SQL语句1
   ADOQuery1.ExecSQL;
   ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add(...);  //SQL语句2
   ADOQuery1.ExecSQL;
   ADOConnection1.CommitTrans;
except
   ADOConnection1.RollbackTrans;
end;程序执行过程中没有任何错误提示,但从结果看好象只有SQL语句2被执行了,
SQL语句1没有被执行,不知道为什么???请高手指点……???

解决方案 »

  1.   

    ADOConnection1.BeginTrans;
    try
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add(...);  //SQL语句1
      // ADOQuery1.ExecSQL;
      //ADOQuery1.Close;
      // ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add(...);  //SQL语句2
       ADOQuery1.ExecSQL;
       ADOConnection1.CommitTrans;
    except
       ADOConnection1.RollbackTrans;
    end;
      

  2.   

    呵呵,不应该这样的,
    我认为,
    你用2个QUERY看看,
    然后应该知道了
      

  3.   

    楼主你的程序没有问题啊,(jtx1226(幻若雪晴))的写法极力不赞成
      

  4.   

    你做的连接可能不是你adoquery连的那个,你把adoquery的connection设定为adoconnection1了吗
      

  5.   

    try
       ADOConnection1.BeginTrans;//在try的内部。
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add(...);  //SQL语句1
       ADOQuery1.ExecSQL;
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add(...);  //SQL语句2
       ADOQuery1.ExecSQL;
       ADOConnection1.CommitTrans;
    except
       ADOConnection1.RollbackTrans;
    end;
      

  6.   

    rikky(读书、心知、生活) 
    为什么我的写法不可以呢?请教。
    我的写法在处理上实际应用过,没有认何问题。可以真证提高数据处理的速度。
      

  7.   

    请问byc6352(雪原) ,把“ADOConnection1.BeginTrans;”放到TRY
    外面有什么问题吗???
      

  8.   

    回rikky(读书、心知、生活) ,adoquery的connection设定是adoconnection1,
    不知道是不是我的D6有什么问题,要不要什么补丁……
      

  9.   

    jtx1226(幻若雪晴) :谢谢您的参与……
    不过我确实没从书上见过您这样写的!
      

  10.   

    这不是DEPHI中书中所能写到的
    这是根据SQL SERVER实际处理。得出的。
    即然,你认为是错的,那我也不想说什么,:)
    就当然,无中生有好了
      

  11.   

    楼主写的没问题的!!
    to (jtx1226(幻若雪晴))的不知如果两个都是INSERT INTO 是不是可以?
      

  12.   

    jtx1226(幻若雪晴) :我倒没觉得错,我也觉得你这样写应该会执行的快一点!!
    BUT………………不要生气啊!大家就事论事……  :)
       谢谢你!!!!
      

  13.   

    顺便再说一点:如果第一个语句是Create table A....;
    第二个语句是为A表创建索引的话,程序运行到此会提示“找不到A表”的错误,
    好象ADOQuery1.ExecSQL没有起作用似的…………
      

  14.   

    楼主你写的方法没错可能是你的SQL语句错了你把你的SQL语句写出来看一下
    也许能看出来!!
      

  15.   

    用SqlServer事件跟踪器看执行的Sql语句是什么,然后在Sql查询分析器中运行Sql语句,有什么错误都会显示出来的.
    启动事务之后,在有些情况下执行Sql语句是不会报错的,尤其是在执行了分布式事务处理的时候。
      

  16.   

    如果是隐式的启动了分布式事务的话Sqlserver的MSDTC服务一定要启动起来以保证两段式的事务正确提交。
      

  17.   

    ADOConnection1.BeginTrans;
    try
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add('update GroupInf set check=''0'' where check=''1''');  //SQL语句1
       ADOQuery1.ExecSQL;
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add('insert into GroupInf values (''01001'',''a'',''1'')');  //SQL语句2
       ADOQuery1.ExecSQL;
       ADOConnection1.CommitTrans;
    except
       ADOConnection1.RollbackTrans;
    end;
      

  18.   

    在这里的check字段是一个标志,表示这条记录是最后一次操作的记录,
    所以每一次向表里插一条新记录,都要把原来的check=1修改为0。