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

倒腾了4、5天,找到最终的解决办法:直接调用AdoConnection.execute(sq脚本),看来AdoQuery调用AdoConnection的还是有兼容性问题。

代码如下:

Function TDM_Base.PassMarkBill(AQuery:TAdoQuery; lTrans:Boolean=True;
  sID:String=''; sMachineID:String=''; sUserName:String='';
  nAddinRate:Real=1; lAllowNegative:Boolean=True; lUpdateLastDate:Boolean=True):Boolean;
Var qry, qryR:TAdoQuery;
  n:Real; lT:Boolean;
  sErrMsg, sSql:string;
Begin
  Result:=False; qryR:=nil;
  Qry:=AQuery;
  if not assigned(qry) then qry:=qry_R; 
  qryR:=getNewAdoQuery(qry.connection); //getNewAdoQuery(qry.connection);
  sErrMsg:='';
  With QryR do
  Try
    Close;
    lT:=false;
    if lTrans and (not connection.inTransaction) then begin
        connection.BeginTrans;
        lT:=true;
    end;
    //**************************调用执行sql存储过程***********************//
    //20160727特别说明:用AdoQuery直接执行,在连接远程的事务中,会出现莫名其妙的错误
    //下面屏蔽掉了的代码,执行完了不报错,但是在Frm_SalePos.SaveData中,
    //调用iBaseBiz.moveMarkBill时,然后调用这里,会导致莫名其妙的错误,
    //程序不报错,但是服务器那头没数据,事务自己撤销了
    //********************************************************************//
    sql.text:='declare @n real ';
    sql.add('exec @n=passMarkBill '+quotedStr(sID)+', '+quotedStr(sUserName)+', '+
        floatToStr(nAddinRate)+', '+iif(lAllowNegative,'1','0')+', '+iif(lUpdateLastDate,'1','0')+' ');
    //sql.add(' exec @n=passMarkBill :sID, :sUser, :nRate, :lAllowNegative, :lUpdateLastDate ');
    sql.add('select @n as nResult ');
    //parameters.ParamValues['sID']:=sID;
    //parameters.ParamValues['sUser']:=sUserName;
    //parameters.ParamValues['nRate']:=nAddinRate;
    //parameters.ParamValues['lAllowNegative']:=lAllowNegative;
    //parameters.ParamValues['lUpdateLastDate']:=lUpdateLastDate;
    //open; //execSql
    sSql:=sql.text;
    connection.Execute(sSql); //******用最底层的连接执行没问题********//

//n:=fields[0].Value;
    //if n<>0 then raise exception.Create('审核出错!返回值非零。'+floatToStr(n));
    //写日志
    writeSysLog(qryR, sID, sID+'审核积分单据', self.name+'.PassMarkBill');
    //
    if lT then connection.CommitTrans;
    Result:=True;
  Except
    On x:Exception do begin
        if lT then connection.RollbackTrans;
        sErrMsg:='[PassMarkBill]审核积分单'+sID+'出错!'#13+x.message;
    End;
  End;
  if assigned(qryR) then freeAndNil(qryR);
  if sErrMsg<>'' then Raise Exception.Create(sErrMsg);
End;

遇到个奇怪的问题,同时开启本地和远程两个事务,远程事务是sql2000没问题,是sql2008的不报错,但是写不上数据的更多相关文章

  1. 今天遇到奇怪的事:SVN本地代码的标记突然没了,Clean up也报错

    今天遇到奇怪的事:SVN本地代码的标记突然没了.Clean up也报错 脑子一想这样的情况,能够先把原来的文件夹改一个名字.又一次把代码check out下来,再合并提交更新,但这样也太LOW了吧 上 ...

  2. 解决Maven依赖本地仓库eclipse报错的问题

    一.应用场景 有时候项目报红色的感叹号错误也是由于项目中没有导入相关jar报导致报错 为了使用maven强大的包依赖管理和项目管理功能,故在项目中使用maven2作为项目建构工具. 但是我的项目在内网 ...

  3. 开启本地MySql数据库远程连接

    解决MySQL不允许从远程访问的方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端口. MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 33 ...

  4. 【vue】http-server开启本地服务

    在写前端页面中,经常会在浏览器运行HTML页面,从本地文件夹中直接打开的一般都是file协议,当代码中存在http或https的链接时,HTML页面就无法正常打开,为了解决这种情况,需要在在本地开启一 ...

  5. webpack开启本地服务器与热更新

    第一个webpack本地服务 webpack本地服务相关的一些操作指令与应用 一.第一个webpack本地服务 //工作区间 src//文件夹 index.js//入口文件 index.css//测试 ...

  6. 在vue项目中添加一个html页面,开启本地服务器

    在vue项目里新增一个不需要登录的页面,那么我只能新增一个html页面了,不经过路由,直接在浏览器输入路径打开,那么就需要用到本地服务器, 1.vue里面的html页面最好放过在public文件夹里面 ...

  7. 本地数据库(SQL Server)远程连接服务器端服务器

    本地数据库(SQL Server 2012) 连接外网服务器的数据库,外网的服务器端需要做如下配置: 1. 首先是要打开 数据的配置管理工具 2. 配置相关的客户端协议,开启TCP/IP 3. 数据库 ...

  8. ftp put本地文件至ubuntu服务器报错

    起因:我想把本地下载的安装包上传至服务器. 由于Mac的ftp图形化客户端还没找着合适的,就想着用命令也是一样的. 但是又进坑了. 下载能够正常运行: ftp> get 2.jpg /Users ...

  9. kindeditor本地上传报错,只限初学者

    困扰了我三天的问题,话说百度真的害死人啊,百度上有说路劲错了的,有说包没导的,有说还要改plugins里面的文件的!其实这个都不用动,也有说服务器问题的,还有说缓存的,还有说是ecplise的,反正我 ...

随机推荐

  1. 用HTML和javascript(JS)计算触屏手机手指滑动方向的演示

    移动终端的流行,程序员希望通过HTML+JS完成触屏动作的识别.下面给出具体实现的例子,供大家参考. 将下面的代码复制并保存,用手机访问,现在的手机浏览器一般都支持触屏,针对本演示来讲就是支持三个js ...

  2. Mysql高级之游标

    原文:Mysql高级之游标 什么是游标?select 语句也许一次性会取出来n条语句,那么游标便可以一次取出来select中的一条记录.每取出来一条,便向下移动一次!可以实现很复杂逻辑! 上面还有有一 ...

  3. c#事件求解

    闲来无聊对于clr一书又重新温习了下,但是看到事件这张后还是有很多的困惑,对于事件能力CLR是这样描述,通知其它对象发生特定的事情. 1.其它对象:是指对于事件的关注者 2.特定的事件:对于满足事件交 ...

  4. MVC应用程序显示上传的图片

    MVC应用程序显示上传的图片 前两篇<MVC应用程序实现上传文件>http://www.cnblogs.com/insus/p/3590907.html和<MVC应用程序实现上传文件 ...

  5. 传说中的WCF(1):这东西难学吗?

    WCF难学吗? 是啊,这问题估计很多人都会问,也包括阿拉在内,也有此深刻而严重的凝问. 也有人说:“如何某项技术可以化繁为简,学起来轻松一点就好了.”也许,人类开生就摆脱不了一种习性——懒惰:不过,也 ...

  6. 实现Client Credentials Grant

    [OAuth]基于DotNetOpenAuth实现Client Credentials Grant   Client Credentials Grant是指直接由Client向Authorizatio ...

  7. 排序算法学习,python实现

    原创博文,转载请注明出处 利用周六周末的时间把几种基本的排序方法用python实现了一下,废话少说,直接上代码. 本文不注重基础知识的讲解,只做大致的描述,大家如果不清楚概念,自行查找资料. 直接插入 ...

  8. UIWebView的探索

    UIWebView 说到iOS的UIWebView,应该会很快回忆起常用委托方法,异步loadRequest.stopLoading.reload方法等. 在此我总结一些容易忽略的属性和方法: 1.  ...

  9. C#HTTP代理的实现之注册表实现

    HTTP代理的实现形式,可以通过修改注册表项,然后启动浏览器来实现,也可以通过SOCKET通信,构造HTTP头实现.下面是关于注册表实现的方式. 注册表实现,只需要修改几个关键的注册表项就可以了. 第 ...

  10. RTB撕开黑盒子 Part 0:Pacing: is everyone doing it wrong?

    曾尝试为我们的RTB客户解决过Pacing问题,Pacing问题要解决的问题是:如果一个客户给你一笔预算,让你去运营一个广告推广计划,在一定的时间内投放广告,将这笔预算在指内的时间内,比较均匀地将预算 ...