sql := 'UPDATE ORG_HUMAN@Kyorg_Link SET PASSWORD='':3:'' WHERE  USERID=''210''';
  SqlQuery1.SQL.Clear;
  SqlQuery1.SQL.Add(SQL);
  SqlQuery1.ExecSQL(false);  TD.TransactionID := 1;
  TD.IsolationLevel := xilREADCOMMITTED;
  try
    sqlconn.StartTransaction(TD) ;  //开始一个事务
    SqlQuery1.SQL.Clear;
    SqlQuery1.SQL.Add(sql);
    SQlQuery1.ExecSQL(False);
    sqlconn.Commit(TD) ;
    showmessage('成功')
  except
    on E:Exception do
    begin
      sqlconn.Rollback(TD) ;
      showmessage('失败:'+e.Message);
    end;
  end;
上面的SQL 语句正常不用事务能执行,开始新事务后会执行失败,错误信息:ORA-24778:  无法打开连接请各位帮忙

解决方案 »

  1.   

    每次都是,上面的代码在一个按钮你执行的,前面的执行成功,后面的失败。也就是说没有开始一个新的事务语句可以正常执行。每次都可以,连接也一直正常。其中
    SqlQuery1 :TSQLQuery;
    sqlconn:TSQLConnection;各位帮忙,我的程序就等着这个了,老板催的急。
      

  2.   

    SQlQuery1.ExecSQL(False); 是用于需要参数的存储过程的
    没有参数的存储过程或者普通SQL语句应该用SQlQuery1.ExecSQL(True);
      

  3.   

    系统连接的是oracle数据库@Kyorg_Link 是我建的DBlink,语句可定正常。不开始新事务,或在PL/SQL中都能执行。
      

  4.   

    楼主的事务,是否已经设为自动提交了? 所以再用sqlconn.Commit时就出错了?
      

  5.   

    theforever(碧海情天) ( )
    不是在提交的时候报错,单部调试SQlQuery1.ExecSQL(False);出错。而且执行其他的语句都可以——在没有@Kyorg_Link (oracle的DBLink)。我在程序中很多地方都用这样开始结束事务的,就是后来要连接其他的库建了DBLink含有@Kyorg_Link 的更新语句执行报错,所有的语句都正确。
      

  6.   

    我把要执行的语句单独挑出来,执行还是那样的。和本身的程序没有关系
    就是用TSqlQuery对象执行用事务会报错,不用也可以执行