以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  为什么foxtable不是用事物提交数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=46913)

--  作者:longtechwj
--  发布时间:2014/3/1 9:58:00
--  为什么foxtable不是用事物提交数据
为什么foxtable不是用事物提交数据
我库存扣了,单却没有生成,网络有
时候会断一下。每次都这样

--  作者:longtechwj
--  发布时间:2014/3/1 10:01:00
--  
弄得我每次都要去用SQL语句调库存
很危险

--  作者:狐狸爸爸
--  发布时间:2014/3/1 10:01:00
--  

在保存的时候恰好中断的概率很低,每次都这样的可能性几乎没有,所以你的问题应该不是这个原因,是代码不严谨造成的。

而且如果网络中断,不管是保存前,还是保存中,都会有错误提示的。

 

如果用事务,可以参考:

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=46326&skin=0

 

[此贴子已经被作者于2014-3-1 10:02:36编辑过]

--  作者:Bin
--  发布时间:2014/3/1 10:02:00
--  
参考一下这里http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=44338&skin=0
--  作者:longtechwj
--  发布时间:2014/3/1 10:10:00
--  
我是说出现的次数太多了,不是每张单都这样
--  作者:longtechwj
--  发布时间:2014/3/1 10:18:00
--  
他们有的人不知道马上把那个异常对话框关掉,这个编号在里面还没存在
下一个人在里面用这个编号已经插入进去了,然后就会报主键约束错误

--  作者:Bin
--  发布时间:2014/3/1 10:21:00
--  
可以考虑使用Try CatCh 出现错误,捕获错误在CatCH中捕获错误,先执行插入编号,再弹出错误提示.

或者你直接用事务吧.

--  作者:狐狸爸爸
--  发布时间:2014/3/1 10:23:00
--  
事务会在2015版加入,目前可以参考其他用户的例子写一下。
--  作者:longtechwj
--  发布时间:2014/3/1 10:26:00
--  
谢谢
--  作者:lsy
--  发布时间:2014/3/1 10:32:00
--  

下面是本人在Oracle数据库里写的函数,执行也很简单:

函数:

CREATE OR REPLACE Function Func_提前出院医保审核_UPDATE
(
病人id_In number,
住院次数_In Number,
收费细目id_in Number,
单据号_in varchar2
)
Return Varchar2
Is
Pragma Autonomous_Transaction;
v_修改状态 Number := 0;
v_姓名 Varchar2(64);
v_是否上传0 Number;
v_是否上传1 Number;
Begin
Select Sum(nvl(是否上传,0)) Into v_是否上传0 From 病人费用记录 Where (记录性质=3 Or 记录性质=2) And (是否上传=0 Or 是否上传 Is Null) And 记录状态<>1 And 病人id=病人id_In And 主页id=住院次数_In And 收费细目id=收费细目id_in And No=单据号_in;
While v_修改状态 = 0 Loop
  Update  病人费用记录 Set 是否上传=1 Where (记录性质=3 Or 记录性质=2) And (是否上传=0 Or 是否上传 Is Null) And 记录状态<>1 And 病人id=病人id_In And 主页id=住院次数_In And 收费细目id=收费细目id_in And No=单据号_in;
   Commit;
      v_修改状态 := 1;
End Loop;
Select Distinct 姓名 Into v_姓名 From 病人信息 Where 病人id=病人id_In;
Select Sum(nvl(是否上传,0)) Into v_是否上传1 From 病人费用记录 Where (记录性质=3 Or 记录性质=2) And 记录状态<>1 And 病人id=病人id_In And 主页id=住院次数_In And 收费细目id=收费细目id_in And No=单据号_in;
If v_是否上传0=0 And v_是否上传1>0 Then
Return (v_姓名||\' 修改成功\');
Else
Return (v_姓名||\' 修改失败\');
End If;
Exception
 When Others Then
  Rollback;
  Return (v_姓名||\' 修改失败\');
End Func_提前出院医保审核_UPDATE;

 

执行

Select Func_提前出院医保审核_UPDATE([0],[1],[2],[3]) As 返回信息 From dual

 

SQLSERVER里面,怎么弄,却不知道了。

[此贴子已经被作者于2014-3-1 10:35:58编辑过]