• delphi用TAdoStoredProc调用存储过程,兼容sql2005、2008、2014的远程事务问题


    delphi7写的程序,在sql2000里没问题,调用sql2008、2014里的存储过程时,如果存储过程里操作了大量数据,很容易会莫名其妙的自己撤销掉,但是程序还识别不到,认为还在正常执行。今天尝试换了个控件:TAdoStoredProc,专门调用存储过程的,问题解决了,贴图如下:

    代码:

    //********************************************************************//

    var AProc:TAdoStoredProc;

    .................
    AProc.ProcedureName:='PassMarkBill';
    AProc.Parameters.CreateParameter('@RETURN_VALUE', ftInteger, pdReturnValue, 10, fgUnAssigned);
    AProc.Parameters.CreateParameter('@sID', ftString, pdInput, 50, sID);
    AProc.Parameters.CreateParameter('@sUser', ftString, pdInput, 50, sUserName);
    AProc.Parameters.CreateParameter('@nRate', ftFloat, pdInput, 50, nAddinRate);
    AProc.Parameters.CreateParameter('@lAllowNegative', ftBoolean, pdInput, 50, lAllowNegative);
    AProc.Parameters.CreateParameter('@lUpdateLastDate', ftBoolean, pdInput, 50, lUpdateLastDate);

    //执行
    //rec:=connection.Execute(s); //******用最底层的连接执行没问题********//
    //if (assigned(rec)) and (not rec.EOF) then nR:=rec.Fields[0].Value;
    AProc.ExecProc;
    n:=int( AProc.Parameters.ParamValues['@RETURN_VALUE'] );
    if n<>0 then raise exception.Create('审核出错!返回值非零。'+floatToStr(n));

    ---------------------------------------------------------------------------------------------

    ps:

        上一次解决的办法太麻烦,用的AdoConnection.execute,很难取返回值,这样就省事了。

        网址:http://www.cnblogs.com/HaiHong/p/haihong.html

        标题:遇到个奇怪的问题,同时开启本地和远程两个事务,远程事务是sql2000没问题,是sql2008的不报错,但是写不上数据。

    海宏原创,转载请注明。

  • 相关阅读:
    Cyber Security
    Cyber Security
    Cyber Security
    Cyber Security
    Balanced Number HDU
    Round Numbers POJ
    Bomb HDU
    不要62 HDU
    Making the Grade POJ
    You Are the One HDU
  • 原文地址:https://www.cnblogs.com/HaiHong/p/6284359.html
Copyright © 2020-2023  润新知