起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 228|回复: 11

【结贴】立即事务不能正确提交**

[复制链接]
发表于 2008-7-29 09:40:45 | 显示全部楼层 |阅读模式
在本平台与金蝶数据库进行数据通讯,我们在金蝶数据库建立了两个存储过程,分别是插入凭证和凭证分录,前者需要传回在金蝶生成的凭证内码,写入到平台的业务库,因此,我使用了立即事务,并将传回的凭证内码写入到业务库,业务库和金蝶使用了同一个事务,这样的会不会产生什么问题?
现在的情况是执行到凭证分录过程时,系统抛出一个Exception异常,不知原因何故?
回复

使用道具 举报

发表于 2008-7-29 10:04:39 | 显示全部楼层
插入凭证、凭证分录、凭证内码写入平台的业务库这几个操作在一个事务里不会有问题。
抛出异常?什么异常呢?
你跟踪一下,看在那个代码里报出异常。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-29 10:12:01 | 显示全部楼层
FTransHandle:= FTransaction.Start(True);
  try
    with FspVoucher do//添加凭证
    try
      Close;
      Params.ParamByName('@FVoucherID').AsInteger:= 0;
      Params.ParamByName('@FDate').AsDateTime:= SysUtils.Now;
      Params.ParamByName('@FGroupID').AsInteger:= 1;
      Params.ParamByName('@FReference').AsString:= '';
      Params.ParamByName('@FEntryCount').AsInteger:= 2;
      Params.ParamByName('@FDebitTotal').AsFloat:= 20;
      Params.ParamByName('@FCreditTotal').AsFloat:= 20;
      Params.ParamByName('@FTransDate').Value:= SysUtils.Now;
      Open;
      lVoucherID:= Fields[0].AsInteger;
    except
      on E:Exception do
        Raise Exception.Create('获取凭证号失败,原因:'+E.Message);
    end;
    with FspVoucherEntry do //添加分录
    try
      //lStr:=SysUtils.IntToStr(Voucher.VoucherID)+' '+ SysUtils.IntToStr(Voucher.Item[I].EntryID);
      Close;
      Params.ParamByName('@ErrorCode').AsInteger:= 0;
      Params.ParamByName('@FVoucherID').AsInteger:= lVoucherID;
      Params.ParamByName('@FEntryID').AsInteger:= 0;
      Params.ParamByName('@FExplanation').AsString:= '';
      Params.ParamByName('@FNumber').AsString:= '1403.01.01';
      Params.ParamByName('@FDC').AsInteger:= 1;
      Params.ParamByName('@FAmount').AsFloat:= 20;
      //Params.ParamByName('@OrderformFNumber').Value:= 'DL-00003';
      //Params.ParamByName('@BankFNumber').AsString:= Voucher.Item[I].BankNumber;
      //Params.ParamByName('@FSettleType').Value:= Voucher.Item[I].SettleType;
      //Params.ParamByName('@FSettleNo').Value:= Voucher.Item[I].SettleNo;
      Params.ParamByName('@FDetailType').AsInteger:= 0;
      Open;
      lErrorCode:= Fields[0].AsInteger;
    except
      on E:Exception do
        Raise Exception.Create('添加凭证分录失败,原因:'+E.Message);
    end;
    with FspVoucherEntry do //添加分录2
    try
      //lStr:=SysUtils.IntToStr(Voucher.VoucherID)+' '+ SysUtils.IntToStr(Voucher.Item[I].EntryID);
      Close;
      Params.ParamByName('@ErrorCode').AsInteger:= 0;
      Params.ParamByName('@FVoucherID').AsInteger:= lVoucherID;
      Params.ParamByName('@FEntryID').AsInteger:= 1;
      Params.ParamByName('@FExplanation').AsString:= '';
      Params.ParamByName('@FNumber').AsString:= '1401';
      Params.ParamByName('@FDC').AsInteger:= 0;
      Params.ParamByName('@FAmount').AsFloat:= 20;
      Params.ParamByName('@OrderformFNumber').Value:= 'DL-00003';
      //Params.ParamByName('@BankFNumber').AsString:= Voucher.Item[I].BankNumber;
      //Params.ParamByName('@FSettleType').Value:= Voucher.Item[I].SettleType;
      //Params.ParamByName('@FSettleNo').Value:= Voucher.Item[I].SettleNo;
      Params.ParamByName('@FDetailType').AsInteger:= 4;
      Open;
      lErrorCode:= Fields[0].AsInteger;
    except
      on E:Exception do
        Raise Exception.Create('添加凭证分录失败,原因:'+E.Message);
    end;
    FTransaction.Commit(FTransHandle);
  except
    FTransaction.Rollback(FTransHandle);
  end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-29 10:17:12 | 显示全部楼层
异常截图,光标停在上贴红色位置

我们的版本是2827 数据库 ms sql 2000

弄了一天了 急~~ 在线等

未命名.jpg

9.07 KB, 下载次数: 128

回复 支持 反对

使用道具 举报

发表于 2008-7-29 10:26:10 | 显示全部楼层
你用的是存储过程?
回复 支持 反对

使用道具 举报

发表于 2008-7-29 10:26:51 | 显示全部楼层
如果是的话,那我建议你直接在存储过程里去处理吧。(事务处理也在存储过程里)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-29 15:21:34 | 显示全部楼层
找到原因了,FspVoucherEntry存储过程没有返回结果集
回复 支持 反对

使用道具 举报

发表于 2008-7-29 16:49:58 | 显示全部楼层
哦,那还有问题吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-11 13:23:39 | 显示全部楼层
没有 发现使用立即事务,如果使用业务数据集很容易提交失败
回复 支持 反对

使用道具 举报

发表于 2008-8-11 13:44:16 | 显示全部楼层
应该不会的,感觉是和用法有关。
立即事务的执行时间要尽可能的短
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-21 07:03 , Processed in 0.044939 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表